Это была плохая идея в ObjC, и это незаконно в Swift. Рассмотрим некоторые из этих случаев:
class X {
var value : Int = 0
func value() -> Int { return 1 }
}
let x = X()
Что такое x.value
в этом случае? Это Int
или это () -> Int
? Разумно и полезно относиться к методам классов, как к закрытию.
Что делать, если мы еще сложнее, и сделать это:
class X {
let value:() -> Int = { 2 }
func value() -> Int { return 1 }
}
let x = X()
let v = x.value() // ????
Должен ли Swift использовать свойство value
, а затем вызвать его? Или он должен вызвать метод value()
? Закрытия полностью законны как свойства.
Такое же ограничение фактически есть в ObjC. Вы не могли бы создать синтезированное свойство, которое противоречило бы методу (если бы у них были разные типы, если они имели одинаковое время, ObjC молчал бы синтезировать аксессор). Вы думаете о свойствах Swift, похожих на эквиваленты Obars, но это неправильно. Свойства Swift эквивалентны свойствам объекта ObjC (т. Е. Методам доступа к ivars). У вас нет доступа к базовым иварам в Swift.
Вы должны избегать имя 'getFormViewController'. Ведущий «get» по-прежнему нарушает KVC, а Swift все еще подчиняется KVC. Но вы правы, что вам следует использовать лучшее имя для метода. –