Я пытаюсь создать пользовательский UIView и потеряться до завершения инициализации.Свойства инициализации в Swift 2
Код Один
class CustomUIView: UIView {
var propertyToInitialize: CGRect
//Custom Initializer
override init(frame: CGRect) {
self.propertyToInitialize = CGRect(x: 0, y: 0, width: (superview?.frame.size.width)!, height: (superview?.frame.size.height)!)
super.init(frame: frame)
}
}
Когда я использую приведенный выше код XCode ошибка дает мне следующим образом.
Ошибка
Use of 'self' property access 'superview' before super.init initializes self
Так я изменил мой код
Код Два
class CustomUIView: UIView {
var propertyToInitialize: CGRect
//Custom Initializer
override init(frame: CGRect) {
self.propertyToInitialize = CGRect()
super.init(frame: frame)
self.propertyToInitialize = CGRect(x: 0, y: 0, width: (superview?.frame.size.width)!, height: (superview?.frame.size.height)!)
}
}
Вопрос
Это плохой дизайн? Должен ли я придерживаться другого подхода? Я инициализирую свойство дважды, поэтому, используя больше памяти?
Спасибо за ответ. Я считаю, что лучший подход для меня - необязательный. Разве нет свойства типа «Lazy» в swift, которое позволяет вам сразу же установить свойство? –
Да, есть. Или вы можете использовать вычисленное свойство, чтобы эта вещь _looks_ как свойство, но на самом деле является функцией, которая рассматривает супервизор в режиме реального времени. – matt