«Использование 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)
}

Ответы на вопрос(1)

Ваш ответ на вопрос