我想增加一个Int?
目前我写了这个:
return index != nil ? index!+1 : nil
有没有更漂亮的方法来写这个?
答案 0 :(得分:8)
您可以使用可选链接调用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
答案 1 :(得分: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?
因此
index != nil ? index! + 1 : nil
相当于
index.map { $0 + 1 }
答案 2 :(得分:1)
您可以选择通过在问号上添加前缀来调用可选方法,这也适用于后缀运算符:
return index?++
更一般地说,你也可以写:
index? += 1; return index