2
votes

Quel initialiseur appelé dans l'initialisation pratique de UIViewController?

J'utilise souvent l'initialisation pratique dans UIViewController pour créer un initialiseur personnalisé.

Mais je ne sais pas quel initialiseur existant de UIViewController est appelé lorsque self .init () .

Est-ce public init (nibName nibNameOrNil: String ?, bundle nibBundleOrNil: Bundle?) ?

Qu'est-ce que appelé lorsque self.init () dans la commodité init de UIViewController?

final class SampleViewController: UIViewController {
    private var component: Component?

    convenience init(component: Component) {  // Custom initializer
       self.init()  // What is this initializer?
       self.component = component
    }

    override func viewDidLoad() {
       ...
    }
    ...
}


0 commentaires

3 Réponses :


-1
votes

Cela dépend de la manière dont UIViewController est instancié.

Cela peut être init (nibName: String ?, bundle: Bundle?) lorsque cela est appelé directement via le code ou init? (coder: NSCoder) si instancié via Mécanismes d'interface Builder (Storyboard Segue, Main View Controller, etc.)


0 commentaires

-1
votes

UIViewController est un NSObject, de UIResponder ...

dans NSObject vous avez un init sans params, c'est juste instanciant la mémoire ...

CONSEIL: Toujours CMD + Cliquez sur la classe si quelque chose semble bizarre ... et allez à ses racines.


0 commentaires

4
votes

UIViewController.init appelle UIViewController.init (nibName: nil, bundle: nil) . Cela signifie que nibName sera égal au nom de la classe et le bundle sera le bundle principal.

UIViewController.init n'est qu'un initialiseur pratique. Dans Swift, cela pourrait être implémenté en utilisant les paramètres par défaut UIViewController.init (nibName: String? = Nil, bundle: NSBundle? = Nil) mais il s'agit d'une ancienne API Objective-C et Objective-C n'a pas paramètres par défaut et c'est pourquoi il existe une commodité distincte init () .


1 commentaires

J? ai compris. Je vous remercie.