Mat*_*ler 11 int increment optional swift
我想增加一个Int?
目前我写的这个:
return index != nil ? index!+1 : nil
Run Code Online (Sandbox Code Playgroud)
有没有更漂亮的方式来写这个?
您可以advanced(by:)使用可选链接调用该函数:
return index?.advancedBy(1)
Run Code Online (Sandbox Code Playgroud)
注意: 这适用于任何Int,而不仅仅是1.
如果您发现自己在代码中多次执行此+操作,则可以定义自己的运算符,将运算符添加Int到Int?:
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)
为了完整起见,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)