有没有一种增加可选 Int 的好方法?

Is there a pretty way to increment an optional Int?

我想增加一个 Int?
目前我写了这个:

return index != nil ? index!+1 : nil

有没有更漂亮的写法?

您可以使用可选链接调用advanced(by:)函数:

return index?.advancedBy(1)

注意: 这适用于任何 Int,而不仅仅是 1


如果您发现自己在代码中多次这样做,您可以定义自己的 + 运算符,将 Int 添加到 Int?:

func +(i: Int?, j: Int) -> Int? {
    return i == nil ? i : i! + j
}

那么你可以这样做:

return index + 1

为了完整起见,Optional有一个map()方法:

/// If `self == nil`, returns `nil`.  Otherwise, returns `f(self!)`.
@warn_unused_result
@rethrows public func map<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U?

因此

index != nil ? index! + 1 : nil

等同于

index.map { [=12=] + 1 }

您可以通过在调用前加上问号来选择性地调用可选对象上的任何方法,这也适用于后缀运算符:

return index?++

更一般的你也可以这样写:

index? += 1; return index