在Swift中,如何将数组中的每个元素设置为nil?

时间:2015-06-30 16:53:27

标签: ios swift

var roomsLiveStates = [Firebase?]()

for ref in roomsLiveStates {
        if ref != nil {
                ref = nil
            }
        }
}

这似乎不起作用。

4 个答案:

答案 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