Ich konstruiere ein Array von Booleans, um den Zustand der Abschnitte in einer UICollectionView zu speichern. Es ist eine Variable als eine Eigenschaft meiner UIViewController gespeichert:Swift optionale Array-Eigenschaft ist unveränderlich?
var _weekSelections : Array<Bool>!
Dann wird in Abhängigkeit von Loadview genannt(), I das Array konstruieren und einen Wert an den ersten Index zuzuordnen:
_weekSelections = Array<Bool>(count:_weekCount, repeatedValue:false)
_weekSelections[0] = true
Der Wert am Index 0 bleibt falsch! Das Array ist aufgebaut und hat mehrere Elemente, aber jede Zuweisung, die ich an einen Index mache, hat keine Auswirkungen auf den Wert, der in diesem Index gespeichert ist, auch wenn ich den Wert in der nächsten Codezeile überprüfe. Ich weiß, dass Swift eine Kopie eines Arrays erstellt, wenn ich eine Aktion ausführe, die seine Länge ändern kann, aber ich denke nicht, dass dies ein Fall ist, in dem eine Kopie erstellt würde. Der einzige Weg, ich jeden Wert bekommen kann, ist, zu ändern, wenn ich eine Kopie manuell erstellen wie folgt:
var copy = _weekSelections
copy[0] = true
_weekSelections = copy
Bin ich etwas offensichtlich fehle oder könnte dies ein seltsamer Fehler sein?
Interessant. Ich kann das reproduzieren, aber wenn ich den Code zu einem 'init()' Aufruf von 'loadView()' verschiebe, funktioniert es. Ich versuche immer noch herauszufinden, was vor sich geht. –
Es passiert mit allen Arten von Arrays, zumindest wenn global gespeichert und in loadView() oder einem Nachkommen. Ich konnte nichts in der Dokumentation finden, das unterschiedliches Änderungsverhalten für global vs. lokal gespeicherte Arrays angibt, und wenn das, was Sie sagen, wahr ist, dann muss es etwas anderes sein. –
Hier ist etwas seltsam: Ich kann eine minimale Swift-Klasse auf einem Spielplatz machen, wo dein Code gut funktioniert. Und wenn ich sage, dass er von NSObject erbt, kann ich dein Problem damit reproduzieren. Das ist die einzige Veränderung. Ich habe eine Reproduktion bis zu etwa 12 Zeilen Code ... Repro: http://pastebin.com/2Xc1qrHQ –