是否有一个单行版本的“如果不为nil,则添加到数组,否则不打扰”?

Dou*_*ith 6 swift

假设我有一个Ints 数组。

var nums = [5, 4, 3, 2, 1]
var maybeNum: Int?
nums.append(maybeNum)
Run Code Online (Sandbox Code Playgroud)

但这会导致错误。我真的需要检查它是否具有值,并且仅在具有值时才插入它吗?

And*_*izá 9

您可以使用以下扩展名:

extension Array {
    public mutating func append(_ newElement: Element?) {
        if let element = newElement {
            self.append(element)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,您仍然可以使用原始append方法。附加非可选元素时,将使用常规方法。附加可选元素时,将使用此方法,并且仅在元素不为 nil 时才附加该元素。


Sup*_*enn 6

将 map(_:) 与可选绑定一起使用,即仅在 MaybeNum 不为 nil 时追加:

var nums = [5, 4, 3, 2, 1]
var maybeNum: Int?
maybeNum.map { nums.append($0) }
Run Code Online (Sandbox Code Playgroud)

苹果文档:https : //developer.apple.com/documentation/swift/optional/1539476-map


Won*_*Kim 5

首先,您必须“解开”maybeNum其类型为 的Int?。解开后,num的类型是Int可以附加到nums: [Int]

if let num = maybeNum {
    nums.append(num)
}
Run Code Online (Sandbox Code Playgroud)


Ted*_*ker 0

您可以将 nums 设为可选 Int 数组。

var nums = [Int?]()
nums = [5, 4, 3, 2, 1]
var maybeNum: Int?
nums.append(maybeNum)
Run Code Online (Sandbox Code Playgroud)

然而,现在数组内部有一个 nil 元素。

另一种选择是:

var nums = [5, 4, 3, 2, 1]
var maybeNum: Int?
if maybeNum != nil {nums.append(maybeNum!)}
Run Code Online (Sandbox Code Playgroud)

这在一行中完成了你想要的事情。