var roomsLiveStates = [Firebase?]()
for ref in roomsLiveStates {
if ref != nil {
ref = nil
}
}
}
这似乎不起作用。
答案 0 :(得分:6)
您可以将每个设置为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
是常数。因此,您无法更改其值。
答案 1 :(得分:5)
您还可以使用map
:
roomsLiveStates = roomsLiveStates.map { _ in nil }
对于其他您可能想要创建数组的已处理副本而不改变原始数据的情况,这是一个较少的代码和良好的习惯。
答案 2 :(得分:0)
您也可以将整个数组重新分配给只包含nil的数组:
roomsLiveStates = [Firebase?](count: roomsLiveStates.count, repeatedValue: nil)
虽然现在我考虑过,但这似乎不太好,因为(可能?)新的内存被分配,而且根本不是很快
编辑:我刚检查过,发现在Debug版本中使用.map
要慢得多。但是,在发布版本中,.map
的速度提高了大约20%。所以我建议使用.map
版本(它也更安静一点);):
array = array.map { _ in nil }
答案 3 :(得分:0)
如果你想将数组中的每个元素设置为一个数字值(int, float, double ...),你可以尝试vDSP
框架。
请检查: https://developer.apple.com/documentation/accelerate/vdsp/vector_clear_and_fill_functions