2016-11-16 20 views
1

當需要在Swift中進行某種類型轉換時,我注意到該語言有兩個單獨的語法形式。我可以這樣寫:多個Swift類型強制轉換語法形式之間的區別

arr as [Any] 

也是這樣:

[Any](arr) 

的是這之間的區別?看來,在一般情況下,任何價值v和類型T,我可以寫所有這些:

Expression Has type Behavior 
========== ======== ============================================== 
v as T  T   Compile error if v cannot have type T 
v as? T  T?  Evaluates to nil if v does not have type T 
v as! T  T   Runtime error if v does not have type T 
T(v)  T   ??? 

問題:名字是對語法形式T(v)什麼?它的語義是什麼?

回答

2

語法T(v)類型轉換的形式 - 這是initialisation。說T(v)將通過調用Tinit(_:)創建T的新實例,該參數需要v參數。

[Any](arr)的情況下,這僅僅是爲Array<Any>.init(arr)語法糖 - 這是Arrayinit(_:)初始化劑,其接受相同的靜態類型與Array的元件的SequenceElement類型(在這種情況下,Any) 。它將簡單地創建一個包含這個序列元素的新數組。

+0

啊哈,這很有道理。謝謝! – jameshfisher

+0

@jameshfisher樂意幫忙:) – Hamish