在Swift中向可选数组添加元素

时间:2015-02-15 21:30:43

标签: arrays swift

在可选数组的末尾追加元素的正确方法是什么?假设我有一个可选的数组myArray,我想在末尾附加'99'。 Append()不适用于nil数组,因此我能找到的唯一解决方案如下,但它看起来并不优雅:

var myArray = [Int]?()

if myArray?.count > 0 {
    myArray?.append(99)
} else {
    myArray = [99]
}

4 个答案:

答案 0 :(得分:45)

您可以使用以下事实:通过可选链接调用的方法始终返回一个可选值,如果不可能,则为nil 打电话给方法:

if (myArray?.append(99)) == nil {
    myArray = [99] 
}

如果myArray != nil,则myArray?.append(99)会附加新元素 并返回Void,以便不执行if-block。

如果myArray == nil,那么myArray?.append(99)什么也不做,就会回来 nil,以便执行if-block并分配数组值。

答案 1 :(得分:3)

@ MartinR的答案正确的答案,但是,为了完整起见,如果你有一个可选的并且想要根据它是否也做不同的行动你可以检查它是否为零(或不是零):

if myArray != nil {
    myArray?.append(99)
} else {
    myArray = [99]
}

请注意(正如您可能已经想到的那样)可选绑定在您的情况下不起作用,因为数组是值类型:它将创建数组的副本,并向其追加新元素,而不会实际影响原始数组:

// Wrong implementation - the new item is appended to a copy of myArray
if var myArray = myArray {
    myArray.append(99)
} else {
    myArray = [99]
}

答案 2 :(得分:1)

尝试使用数组合并运算符,而不是使用append。因为结果是可选的,使用nil coalescing运算符在初始数组为nil时分配一个元素数组。

var myArray = [Int]?()

myArray? += [99]
myArray = myArray ?? [99]

我试图将它合并到一个行表达式中,但不幸的是Swift不喜欢它

myArray = (myArray? += [99]) ?? [99]

答案 3 :(得分:0)

我的一个班轮使用零合并:

myArray = (myArray ?? []) + [99]