Ich verwende kein UIViewController
Storyboard und möchte eine benutzerdefinierte init
Funktion haben, bei der ich ein NSManagedObjectID
Objekt übergebe. Ich möchte nur anrufen, super.init()
wie ich es in Objective-C getan habe. So was:
init(objectId: NSManagedObjectID) {
super.init()
}
Aber ich bekomme folgenden Compilerfehler:
Muss den designierten Initialisierer des UIViewControllers der Oberklasse aufrufen
Kann ich das einfach nicht mehr machen?
quelle
initWithCoder:
aus demNSCoding
Protokoll stammt ... Ich kann immer noch nicht herausfinden, welche Rolle es bei der Initialisierung einer UIViewController-Instanz spielt, ob es sich um einen "designierten" Initialisierer von UIViewController oder einer seiner Superklassen handelt. .let
Eigenschaften festgelegt haben, falls vorhanden :super.init(nibName: nil, bundle: nil)
.Eine andere gute Lösung besteht darin, Ihren neuen
convenience
Initialisierer wie folgt als Initialisierer zu deklarieren :Wenn Sie in Ihrer Unterklasse überhaupt keine festgelegten Initialisierer deklarieren, werden diese automatisch vererbt und Sie können sie
self.init()
in Ihrem praktischen Initialisierer verwenden.Im Falle von UIViewController wird die Standard - Init - Methode aufrufen ,
init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!)
mitnil
für beide Argumente (Befehlstaste auf UIViewController geben Ihnen diese Informationen).TL; TR : Wenn Sie lieber programmgesteuert mit
UIViewController
s arbeiten möchten, finden Sie hier ein vollständiges Arbeitsbeispiel, das einen neuen Initialisierer mit einem benutzerdefinierten Argument hinzufügt:quelle
myString
so eingestellt ist,""
dass dasinit
nicht erforderlich ist. Diese Lösung fällt auseinander, wenn Sie keinen Anfangswert verwenden möchten, und in diesem Fall müssen Sie verwendenself.init(nibName: nil, bundle:nil)
myString
Eigenschaft optionalUm die Antwort des Okkulus zu verbessern :
quelle
Update: Fügen Sie den Link hinzu
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621359-init
Gemäß der Dokumentation für iOS ist der designierte Initialisierer für UIViewController
initWithNibName: bundle:
.Sie können dies wie folgt tun:
oder
Deklarieren Sie einen neuen Initialisierer als praktischen Initialisierer:
}}
quelle