"L'usage de soi dans l'appel de la méthode avant de super.init initialise soi", ne peut pas init propriétés par le biais d'un appel de méthode

Je suis curieux de savoir il est de toute façon d'appeler une méthode à l'intérieur de votre méthode init qui définit les propriétés d'une instance de la classe. En fait, j'ai juste une classe qui sous-classes UIView, ajoute des sous-vues dans l'init, et certains de ces sous-vues sont variables d'instance de la classe.

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()

    }
}

Maintenant, le problème est que je ne peux pas appeler super init avant l'initialisation de mes classes de propriétés internes (Propriété de soi.collectionView' pas inialized super.initialisation d'appel), mais je ne peux pas appeler ma méthode personnalisée pour initialiser les variables avant super.init, comme il ne peut pas utiliser l'auto avant que l'initialisation. Je me rends compte que je pourrais faire la variable d'instance en option, mais il semble de moins en moins élégant, comme je sais qu'il sera toujours initialisé (il y en a plusieurs, c'est juste une version simplifiée). Est-il possible d'atteindre cet objectif sans faire de toutes mes variables d'instance options?

EDIT:

Je pense que finalement ma question est pourquoi swift dis-permettre l'appel d'une méthode avant de faire appel à super.init? Quelle est la différence entre:

override init (frame : CGRect) {
    addSubviews()
    super.init(frame : frame)
}

final func addSubviews (){
    self.collectionView = UICollectionView()
}

et

override init (frame : CGRect) {
    self.collectionView = UICollectionView()
    super.init(frame : frame)
}
Depuis que vous savez qu'ils seront toujours être initialisé, vous pouvez faire les propriétés implicitement déballé options.
Voilà comment étaient en train de faire, mais j'aime le moment de la compilation, vérifier pour s'assurer que nous sommes en fait les configurer
donner les propriétés valeurs par défaut

OriginalL'auteur Kevin DiTraglia | 2015-11-17