是否有一种增加可选Int的漂亮方法?

Mat*_*ler 11 int increment optional swift

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

return index != nil ? index!+1 : nil
Run Code Online (Sandbox Code Playgroud)

有没有更漂亮的方式来写这个?

vac*_*ama 8

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

return index?.advancedBy(1)
Run Code Online (Sandbox Code Playgroud)

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


如果您发现自己在代码中多次执行此+操作,则可以定义自己的运算符,将运算符添加IntInt?:

func +(i: Int?, j: Int) -> Int? {
    return i == nil ? i : i! + j
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

return index + 1
Run Code Online (Sandbox Code Playgroud)


Mar*_*n R 7

为了完整起见,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?
Run Code Online (Sandbox Code Playgroud)

因此

index != nil ? index! + 1 : nil
Run Code Online (Sandbox Code Playgroud)

相当于

index.map { $0 + 1 }
Run Code Online (Sandbox Code Playgroud)