У меня есть этот код:Swift 1.2: 'я' используется до super.init вызова
class SomeViewController : UIViewController {
let deferred :()->()
required init(coder aDecoder : NSCoder) {
deferred = {
self.doSomething()
}
super.init(coder: aDecoder)
}
func doSomething() {
// Does things....
}
}
В Swift 1.2 это не удается скомпилировать с ошибкой:
'сам' использовали до super.init звонок
В течение до 1.2 дней мы можем обращаться к нему несколькими способами, такими как неявно разворачиваемые условные обозначения. Такой подход не будет работать.
Я видел, что другие ответы ссылаются на двухэтапную инициализацию или ленивый декоратор, но обе жертвуют неизменностью свойства. Разумеется, это должно быть разрешено в Swift 1.2, но у меня нет идей.
Есть ли причина, по которой вы не можете просто перевести вызов на 'super' * до * вы используете' self'? Это именно то, о чем говорит вам ошибка, и я не вижу причин, чтобы посмотреть на код, почему это не должно быть хорошо, и вы не объяснили никакой причины. – nhgrif
@nhgrif: Но вы не можете называть 'super.init()' before' self' (включая свойство 'deferred') полностью инициализированным. –
@MartinR О, я вижу. Теперь имеет смысл. Кроме того ... если бы это сработало, не создало бы цикл сохранения на 'self'? – nhgrif