Questa è stata una cattiva idea in ObjC, ed è illegale in Swift. Prendi in considerazione alcuni di questi casi:
class X {
var value : Int = 0
func value() -> Int { return 1 }
}
let x = X()
Che cos'è x.value
in questo caso? È Int
o è () -> Int
? È legale e utile trattare i metodi delle classi come se fossero delle chiusure.
Che cosa succede se siamo ancora più difficile, e fare questo:
class X {
let value:() -> Int = { 2 }
func value() -> Int { return 1 }
}
let x = X()
let v = x.value() // ????
Qualora Swift utilizzare la proprietà value
e poi lo chiamano? O dovrebbe chiamare il metodo value()
? Le chiusure sono completamente legali come proprietà.
La stessa restrizione esiste effettivamente in ObjC. Non è stato possibile creare una proprietà sintetizzata che fosse in conflitto con un metodo (se avessero tipi diversi, se avessero avuto lo stesso tempo, ObjC non avrebbe sintetizzato in silenzio l'accessor). Stai pensando alle proprietà di Swift come se fossero equivalenti agli Ivar di ObjC, ma non è giusto. Le proprietà di Swift sono equivalenti alle proprietà dell'ObjC (ovvero i metodi che accedono a ivars). Non hai accesso agli Ivars sottostanti in Swift.
fonte
2015-03-12 17:49:25
Si dovrebbe comunque evitare il nome 'getFormViewController'. Un "get" leader viola ancora KVC e Swift è ancora soggetto a KVC. Ma hai ragione che dovresti usare un nome migliore per il metodo. –