Swift: captura o parâmetro inout em fechamentos que escapam à função chamada

Tentei escrever uma classe "editor" que pudesse manter uma referência a uma propriedade em um objeto diferente para posterior mutação. Primeiro escrevi para a turma do editor para receber um encerramento para leitura e um encerramento para escrita. Isso funcionou. Tentei passar o parâmetro em questão por referência (inout) e gerar o par getter / setter a partir disso. Isso não funcionou. Os documentos do Swift dizem (parafraseando) que o Swift descobre quando copiar e quando não copiar. Acho que sou contra a imprevisibilidade dessa limitação, mas pensei em colocar a questão da mesma forma.

Como alternativa, é possível obter uma função ao curry para o getter e setter individual?

Meu código é:

class SomeModel : Printable {

    var a:String

    init(a:String) {
        self.a = a
    }

    var description:String {
        return "\(self.a)"
    }
}


class Editor {

    var getter:()-> String
    var setter:(String)->()

    init(getter:()-> String, setter:(String)->()) {
        self.getter = getter
        self.setter = setter
    }

    convenience init(inout bindTo:String) {
        self.init(
            getter:{ return bindTo },
            setter: { v in bindTo = v })
    }

    func read() -> String {
        return self.getter()
    }

    func write(value:String) {
        self.setter(value)
    }
}


func testBindTo() {
    var readModel =  SomeModel(a:"Did not capture by reference");
    var bindForReading = Editor(bindTo: &readModel.a)
    readModel.a = "captured by reference!"
    println(bindForReading.read())

    var writeModel =  SomeModel(a:"Did not capture by reference");
    var bindForWriting = Editor(bindTo: &writeModel.a)
    bindForWriting.write("captured by reference")
    println(writeModel)
}

testBindTo()


func testExplicitGetterSetter() {

    var readModel =  SomeModel(a:"Did not capture by reference");
    var bindForReading = Editor(
        getter: { readModel.a },
        setter: { v in readModel.a = v })
    readModel.a = "captured by reference!"
    println(bindForReading.read())

    var writeModel =  SomeModel(a:"Did not capture by reference");
    var bindForWriting = Editor(
        getter: { writeModel.a },
        setter: { v in writeModel.a = v })
    bindForWriting.write("captured by reference")
    println(writeModel)     
}

testExplicitGetterSetter()

Os resultados são:

Did not capture by reference
Did not capture by reference
captured by reference!
captured by reference

Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion