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() { ... } ... }
3 Réponses :
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.)
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.
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 ()
.
J? ai compris. Je vous remercie.