2017-03-28 12 views
5

タイプ()のパラメータを渡すイベントを受け取りました。迅速に '()'タイプとは何ですか?

これは空のタプルですか?

Iは、式のこのタイプを参照しています:

let x =()

+1

@xoudini:密接に関連していますが、まったく同じではありません(私は思う)。その質問は型として '()'についてです。ここで '()'は値であり、 'Void'で置き換えることはできません。 'let x = Void'はコンパイルされません。 –

+0

空のタプル()のインスタンス(値)を明示的に使用する可能性はありますか?つまり、タイプアリアス 'Void'のインスタンスは明示的に使用されていますか? /stackoverflow.com/q/34561452/2976878) – Hamish

+1

@MartinR良い点、別の見方では、質問が全く同じではないことに同意する必要があります。 – xoudini

答えて

4

()タイプ(及びVoid空タプル型の型エイリアスである)、およびそのタイプの唯一の両方です。そう

let x =() 

タイプ()(別名Void()との一定のプロパティとしてxを定義します。

同等の文は、型ではなく、値ではありません

let x = Void // error: expected member name or constructor call after type name 

Voidので

let x:() =() 
let x:Void =() 

しかしだろう。

なしパラメータおよび/または戻り値なし で関数型を定義するときノーリターン値のために空のパラメータリストの()、 とVoidを使用するためのコンセンサスがあるように思われます。これは、例えば、 UIKit補完ハンドラ、または GCDディスパッチキューに提出された実行ブロックで見ることができる。

func sync(execute block:() -> Void) 
+2

Aは、 '() - >()'と '(Void) - > Void'の両方が可能ですが、パラメータを持たず戻り値のない関数を定義するコンセンサスは'() - > Void'です。 – Sulthan

+0

@スルタン:あなたは正しいですし、提案に感謝します。しかし、私はまだ見つけていないいくつかの参考資料でそれをバックアップすることを好むでしょう。 –

+0

すべての補完ハンドラについてアップルリファレンスドキュメントを数えない場合は、リファレンスがないと思っています:) – Sulthan

2

はい、それはVoid別名、空のタプルです。

標準Void型は次のように定義されます

typealias Void =() 

明示的に戻り値の型を指定しない関数の戻り値の型。空のタプル(すなわち、())。 Swift grammarのためのドキュメントを見てみると

2

:すべてのタプルタイプ

は、空のタプル型、()ためtype aliasあるVoidを除いて、2種類以上を含んでいます。

tuple-type → (­)­ | (­ tuple-type-element­ , ­tuple-type-element-list­)­ 
tuple-type-element-list → tuple-type-element­ | tuple-type-element ­, ­tuple-type-element-list­ 
tuple-type-element → element-name­ type-annotation­ | type­ 
element-name → identifier­ 

ためはい、それはゼロタイプ/要素のタプルです。

+1

も文法のドキュメントから入手できます。 > *すべてのタプル型には、空のタプル型の型エイリアスである 'Void'を除いて、2つ以上の型が含まれます。'() '*。 –

+0

@GabrielePetronellaその文を指摘してくれてありがとう。 – luk2302