Explizit gesetzt wahr Bool wird irgendwie auf falsch gesetzt

8

Gehen Sie folgendermaßen vor:

Erstellen Sie eine Klasse namens A , Unterklasse von UITableViewCell :

%Vor%

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 :

setzen

Erstellen Sie eine Instanz von A :

%Vor%

Print isChosen :

%Vor%

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:

%Vor%

es wird immer noch irgendwie auf false gesetzt.

    
Snowman 01.08.2014, 19:25
quelle

1 Antwort

4

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:

%Vor%

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:

%Vor%

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.

    
Keenle 01.08.2014 20:05
quelle

Tags und Links