Я создаю массив булевых элементов для хранения состояния разделов в UICollectionView. Это переменная хранится как свойство моего UIViewController:Быстрое необязательное свойство Array является неизменным?
var _weekSelections : Array<Bool>!
Тогда, в функции, вызываемой loadView(), я построить массив и присвоить значение первого индекса:
_weekSelections = Array<Bool>(count:_weekCount, repeatedValue:false)
_weekSelections[0] = true
Значение в индексе 0 остается ложным! Массив построен и имеет несколько элементов, но любое присваивание, которое я делаю для индекса, не влияет на значение, хранящееся в этом индексе, даже если я проверю значение в самой следующей строке кода. Я знаю, что Swift создает копию массива, если я выполняю действие, которое может изменить его длину, но я не думаю, что это случай, когда бы я сделал копию. Единственный способ, которым я могу получить любое значение, чтобы изменить это, если я вручную создать копию следующим образом:
var copy = _weekSelections
copy[0] = true
_weekSelections = copy
я упускаю что-то очевидно, или это могло быть странно ошибка?
Интересно. Я могу воспроизвести это, но если я переведу код на вызов 'init()' из 'loadView()', он будет работать. Все еще пытаюсь понять, что происходит. –
Это происходит со всеми типами массивов, по крайней мере, при хранении в глобальном масштабе и в loadView() или потомке. Я не мог найти что-либо в документации, определяющей поведение разных модификаций для глобальных массивов и локально хранимых массивов, и если то, что вы говорите, является истинным, то это должно быть что-то другое. –
Вот что-то странное: я могу создать минимальный класс Swift на игровой площадке, где ваш код отлично работает. И тогда, если я скажу, что он наследует от NSObject, я могу воспроизвести вашу проблему с ним. Это единственное изменение. У меня есть воспроизведение примерно до 12 строк кода ... Repro: http://pastebin.com/2Xc1qrHQ –