var roomsLiveStates = [Firebase?]()
for ref in roomsLiveStates {
if ref != nil {
ref = nil
}
}
}
Это не работает.
var roomsLiveStates = [Firebase?]()
for ref in roomsLiveStates {
if ref != nil {
ref = nil
}
}
}
Это не работает.
Вы можете просто установить для каждого значение nil
:
for index in 0 ..< roomsLiveStates.count {
roomsLiveStates[index] = nil
}
Как говорит Swift Язык программирования в Control Flow обсуждение синтаксиса for
:
В этом примере печатаются первые несколько записей в таблице из пяти раз:
for index in 1...5 { println("\(index) times 5 is \(index * 5)") }
... В приведенном выше примере
index
является константой, значение которой автоматически устанавливается в начале каждой итерации цикла. Таким образом, он не должен быть объявлен до его использования. Он неявно объявляется просто его включением в объявление цикла, без необходимости в ключевом словеlet
.
Как говорится, index
является константой. Таким образом, вы не можете изменить его значение.
Вы также можете использовать map
:
roomsLiveStates = roomsLiveStates.map { _ in nil }
Это меньше кода и хорошая привычка заниматься другими случаями, когда вы можете создать обработанную копию массива без изменения оригинала.
Вы также можете просто переназначить весь массив на тот, который содержит только nil:
roomsLiveStates = [Firebase?](count: roomsLiveStates.count, repeatedValue: nil)
Хотя теперь, когда я думаю об этом, это не кажется таким хорошим, потому что (возможно?) выделяется новая память, которая не является быстрой *
EDIT: я только что проверил и обнаружил, что использование .map
намного медленнее в сборках Debug. Однако в версиях Release .map
на 20% быстрее. Поэтому я предлагаю использовать версию .map
(которая также немного более симпатичная;)):
array = array.map { _ in nil }