J'ai récemment rencontré un problème : du code Swift 5 que j'ai écrit se compile dans Xcode 11.0 mais pas dans 11.2.1, et ce dernier se plaint qu'il n'y a pas d'initialisateur par défaut pour ma classe étendant UIViewController (elle ne définit aucun initialisateur) lorsque j'essaie de l'instancier.
En effet, lorsque je regarde la définition de UIViewController, ce sont les deux seules définitions :
public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
public init?(coder: NSCoder)
Il contient également un commentaire qui semble impliquer qu'un initialisateur par défaut devrait également être présent, mais je ne le trouve pas.
/*
The designated initializer. If you subclass UIViewController, you must call the super implementation of this
method, even if you aren't using a NIB. (As a convenience, the default init method will do this for you,
and specify nil for both of this methods arguments.) In the specified NIB, the File's Owner proxy should
have its class set to your view controller subclass, with the view outlet connected to the main view. If you
invoke this method with a nil nib name, then this class' -loadView method will attempt to load a NIB whose
name is the same as your view controller's class. If no such NIB in fact exists then you must either call
-setView: before -view is invoked, or override the -loadView method to set up your views programatically.
*/
J'ai trouvé une solution pour que cela fonctionne, il me suffit de définir les trois initialisateurs en faisant appel aux initialisateurs de la superclasse, l'initialisateur par défaut fonctionnant comme décrit dans le commentaire, mais je reste perplexe quant à la façon dont j'ai pu utiliser l'initialisateur par défaut pendant tout ce temps alors que je ne le trouve nulle part. Où l'initialisateur par défaut décrit dans le commentaire est-il réellement défini ?