Gehen Sie folgendermaßen vor:
Erstellen Sie eine Klasse namens A
, Unterklasse von UITableViewCell
:
Erstellen Sie eine xib-Datei und ziehen Sie ein UITableViewCell
-Objekt als Objekt der obersten Ebene, und stellen Sie sicher, dass Sie die Klasse auf A
:
Erstellen Sie eine Instanz von A
:
Print isChosen
:
Ausgabe:
%Vor%Warum passiert das? Es passiert nur, wenn Sie die Instanz von einer Spitze initialisieren.
Auch wenn Sie die Variable als optional deklarieren und auf nil
setzen:
es wird immer noch irgendwie auf false
gesetzt.
Da Ihre Klasse A
keine init-Methoden definiert, hat swift automatisch automatisch den Standard-Initialisierer für Sie generiert. Mit init()
ist der Methodencode var isChosen: Bool = true
eine Verknüpfung zu:
Wenn Sie Ihre benutzerdefinierte Zelle vom Typ A
von Nib erstellen, wird automatisch generierte init()
-Methode nicht aufgerufen, weil initWithCoder
also isChosen
-Wert false
heißt.
UPDATE:
Wie bereits von @MattGibson in Kommentaren zu der Frage erwähnt, können wir mit xCode 6 Beta 5 das Problem beheben. Es kann gelöst werden, indem man init with coder
initialisierer hinzufügt und es als erforderlich markiert, so dass A
folgenden Code enthalten sollte:
Wie es funktioniert? Von Beta 5 Release Notes:
Der erforderliche Modifikator wird vor jeder Unterklassenimplementierung geschrieben eines erforderlichen Initialisierers. Erforderliche Initialisierer können mit erfüllt werden automatisch geerbte Initialisierer.
UPDATE:
required init(coder aDecoder: NSCoder!) { ... }
sollte nur hinzugefügt werden, wenn Sie mindestens eine init
-Methode in Ihrer Klasse überschreiben.
Tags und Links swift