«Использование self в вызове метода перед super.init инициализирует self», не может инициировать свойства через вызов метода
Мне любопытно, есть ли в любом случае вызов метода внутри вашего метода init, который устанавливает свойства экземпляра класса. По сути, у меня просто есть класс, который подклассов UIView, добавляет некоторые подпредставления в init, и некоторые из этих подпредставлений являются переменными экземпляра класса.
class MyView: UIView {
var collectionView: UICollectionView
convenience init () {
self.init(frame:CGRectZero)
}
override init (frame : CGRect) {
super.init(frame : frame)
addSubviews()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
addSubviews()
}
func addSubviews (){
self.collectionView = UICollectionView()
}
}
Теперь возникает проблема: я не могу вызвать super init до инициализации внутренних свойств своих классов (свойство self.collectionView не инициализируется при вызове super.init), но я также не могу вызвать свой пользовательский метод для инициализации этих переменных до super.init, так как он не может использовать self до этой инициализации. Я понимаю, что мог бы сделать переменную экземпляра необязательной, но она кажется менее элегантной, поскольку я знаю, что она всегда будет инициализироваться (и есть еще несколько, это просто упрощенная версия). Есть ли способ сделать это, не делая все мои переменные экземпляра необязательными?
РЕДАКТИРОВАТЬ:
Я думаю, что в конечном итоге мой вопрос заключается в том, почему swift запрещает вызывать метод до вызова super.init? В чем разница между:
override init (frame : CGRect) {
addSubviews()
super.init(frame : frame)
}
final func addSubviews (){
self.collectionView = UICollectionView()
}
а также
override init (frame : CGRect) {
self.collectionView = UICollectionView()
super.init(frame : frame)
}