Поскольку вы сказали
, но очевидно, что self еще не существует
Похоже, вы понимаете, что не можете получить доступ к self
до тех пор, пока все свойства были инициализированы в инициализаторе. Ну, methodA
и self.methodA
на самом деле одно и то же. Первое просто коротко для последнего, потому что self
обычно не требуется, когда нет двусмысленности.
Одним из решений является инициализация его в инициализаторе, после инициализации outputFunc
сначала чем-то другим:
init() {
outputFunc = {_ in}
outputFunc = methodA
}
Лично я действительно не думаю, что есть какая-либо опасность, позволяющая вам присвоить метод свойству, когда класс / структура не инициализированы должным образом. Это ограничение предотвращает подобные вещи (надуманный пример):
class Foo {
var foo = f() // foo's value should be the return value of f...
func f() -> Int {
print(foo) // but to execute f, we need the value of foo...
return foo + 1 // so what is the value of foo?
}
}
Но поскольку вы на самом деле не звоните methodA
, я не понимаю, как это назначение может вызвать проблемы. Я предполагаю, что они просто запретили все варианты использования self
, не допуская исключений, потому что это проще реализовать таким способом.