在可选数组的末尾附加元素的正确方法是什么?假设我有一个可选的数组myArray,我想在末尾附加'99'.Append()不适用于nil数组,因此我能找到的唯一解决方案如下,但它看起来并不优雅:
var myArray = [Int]?()
if myArray?.count > 0 {
myArray?.append(99)
} else {
myArray = [99]
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 53
您可以使用以下事实:通过可选链接调用的方法始终返回一个可选值,即nil
如果无法调用该方法:
if (myArray?.append(99)) == nil {
myArray = [99]
}
Run Code Online (Sandbox Code Playgroud)
如果myArray != nil
然后myArray?.append(99)
追加新元素并返回Void
,则不执行if块.
如果myArray == nil
则不myArray?.append(99)
执行任何操作并返回
nil
,则执行if块并分配数组值.
@MartinR 的答案是正确的答案,但是,为了完整起见,如果您有一个可选项并且想要根据它是否为可选项执行不同的操作,您可以检查它是否为零(或不为零):
if myArray != nil {
myArray?.append(99)
} else {
myArray = [99]
}
Run Code Online (Sandbox Code Playgroud)
请注意(正如您可能已经发现的那样)可选绑定在您的情况下不起作用,因为数组是值类型:它会创建数组的副本,并向其附加一个新元素,而实际上不会影响原始数组:
// Wrong implementation - the new item is appended to a copy of myArray
if var myArray = myArray {
myArray.append(99)
} else {
myArray = [99]
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8827 次 |
最近记录: |