2016-11-16 6 views
1

Swiftで型変換を行う必要があるとき、私は言語に2つの構文形式があることに気付きました。複数の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)と言うと、の新しいインスタンスが作成され、のinit(_:)にはvという引数が付きます。 [Any](arr)の場合

、これはArray<Any>.init(arr)ためだけ糖衣構文である - (ここで、Any)S ElementタイプArrayArray同じ静的型の要素のSequenceを受け付けるS init(_:)初期化剤」であります。このシーケンスの要素を含む新しい配列を作成するだけです。

+0

ああ、これは理にかなっています。ありがとう! – jameshfisher

+0

@jameshfisher喜んで助けてください:) – Hamish

関連する問題