2015-11-19 28 views

回答

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 } 
+0

我喜歡+ 1這個增量更明顯,它可以和任何其他數字一起使用:) –

6

可以調用使用可選的successor財產鏈

return index?.successor() 

對於任意值,advancedBy作品:

return index?.advancedBy(15) 

如果你發現自己在做很多次你的代碼,你可以定義你自己的+運營商,增加一個Int一種Int?

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

然後,你可以只是做:

return index + 1 
+0

好的除了你的答案! –

+0

謝謝!我又添了一個。 – vacawama

0

您可以通過前面加上一個問號電話可選呼籲可選的任何方法,而這個工程的後綴運算符太:更一般

return index?++ 

你也可以寫:

index? += 1; return index 
+1

正如在一個被刪除的問題中所說的,當索引是一個常量時(let) –

+0

'回報指數? + = 1'不起作用。它給出編譯錯誤'錯誤:不能轉換返回表達式的類型'()?'返回類型'Int?'' – vacawama

+0

你是對的。我編輯了我的代碼片段來解決問題。無論如何,它仍然不符合使用的要求,並且使用地圖已經有了一個很好的答案。 –

相關問題