2016-07-28 43 views
2
var title: Double? = nil 
    var title2 = Optional<Double>.None 

上述兩件事情似乎都表現爲可選雙打。但是當我持有期權並點擊titletitle2時,它顯示它們有不同的類型。一個是Double?,另一個是Optional<Double>。我只是想知道這兩者之間有什麼區別。如果他們沒有什麼不同,爲什麼他們還有兩個呢?是可選的一個客觀的C東西,被轉移到迅速或什麼東西?對於Swift,是雙重的嗎?與可選<Double>相同?

+1

沒有區別。 'T?'是'Optional '的快捷方式。 –

+1

嘗試'print(title.dynamicType)'和'print(title2.dynamicType)'。 – vacawama

+1

Objective-C中沒有「可選項」,所以它肯定不是來自那裏的餘數:) –

回答

3

沒有區別,並沒有什麼特別之處Double這裏。

對於任何類型TT?是(編譯器內置) 快捷方式Optional<T>。所以

var value: T? 
var value: Optional<T> 

是等同的。 Optional符合NilLiteralConvertible 協議,即一個值可以從字面nil被實例化,並且

var value: T? = nil 
var value: T? = .None 
var value: T? = Optional.None 
var value: T? = Optional<T>.None 
var value: T? = T?.None 

都是等效的。在前三條語句中,右側值的類型 Optional<T>是從左側 側的類型註釋推斷出來的。最後兩條語句可縮寫爲

var value = Optional<T>.None 
var value = T?.None 

因爲該類型是從右側自動推斷的。

最後,由於自選隱式初始化爲.None所有上述語句是等價的。

相關問題