Uso Xcode6-beta2, ma ho riscontrato lo stesso problema dalla prima beta pubblica. Il mio sottoclasse Swift di Obj-C UIViewController assomiglia a questo:Accesso alle proprietà di istanza che sono le chiusure
class SomeVC: UIViewController {
var c1:() ->() = {
println(self)
}
var c2:() ->() {
get {
return { println(self) }
}
}
var c3:() ->() {
return { println(self) }
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
c1()
c2()
c3()
}
}
Quando viene visualizzato il VC, vedo le seguenti righe stampate fuori:
(Function)
<_TtC12SwiftiOSTest6SomeVC: 0x10bf1ed10>
<_TtC12SwiftiOSTest6SomeVC: 0x10bf1ed10>
(C2 e C3 differiscono solo nel senso che è non è necessario includere get {...} per una proprietà calcolata se è ottenibile solo.)
Quindi, il primo auto sembra riferirsi al tipo funzione/chiusura stesso, mentre gli altri ' auto fare riferimento al controller della vista (come mi aspetterei). L'unica differenza tra c1 e c2/c3 è che il primo è una proprietà memorizzata, le seconde sono proprietà calcolate, ma mi aspetto ancora che le chiusure ei loro valori acquisiti siano gli stessi, ovvero auto per fare sempre riferimento al classe. Per come stanno le cose ora, non sembra esserci un modo ovvio per la chiusura dello c1 per accedere ai metodi/proprietà della classe che li include.
È qualcosa di documentato da qualche parte (ho letto il libro Swift e non ho trovato nulla), o è solo un bug di un compilatore beta di qualche tipo, che dovrebbe essere archiviato da qualche parte?
Ho provato e ho ottenuto questo errore del compilatore: 'SomeVC ->() -> SomeVC!' non ha un membro chiamato 'nome'. ** Ma **, il tuo codice è diverso dal mio in un altro aspetto: @lazy keywoard/direttiva/qualunque esso sia. Quando aggiungo questo davanti alla definizione di chiusura ** c1 **, funziona, non ho nemmeno bisogno del ** nome ** var. Questo è ancora più confuso, che cosa ha a che fare l'utente pigro con qualcosa qui? – wujek
Controlla la mia risposta aggiornata. specialmente @ pigro –
Quindi questo sembra un bug del compilatore, vero? – wujek