2016-04-04 11 views
0

私はそれが定義されているSwiftのドキュメントを見つけようとしますが、できませんでした。Swiftでは、Arrayリテラルとして `[]`を使用できると定義されていますか?

私は次のようにSTH期待:初期として[]の代わりArrayを使用することが可能である理由

typealias [] = Array 
typealias [Element] = Array<Element> 
typealias [AnyObject] = Array<AnyObject> 

ので? ANSWER ON DEPENDING

EDIT:
私は私のカスタムPersonクラスで同じことをしようが、それは仕事をdoesntの:

class Person: ArrayLiteralConvertible { 

    typealias Element 
    public init(arrayLiteral elements: Self.Element...) 
} 

let personNames: Person = ["John", "Mark", "Kris"] 
+0

[ArrayLiteralConvertible](http://nshipster.com/swift-literal-convertible/)? – tktsubota

+0

私はこれが言語(コンパイラ)機能であると想像します。 [こちら](https://github.com/apple/swift/blob/master/lib/Parse/ParseType.cpp#L88-L90)を確認してください。 –

答えて

0

あなたはリテラルのプロトコルに準拠してリテラルのすべてとして書くことができます。アレイは、ArrayLiteralConvertibleプロトコルに準拠として設定しますが、あなたはコンパイラの混乱を避けるためにタイプを同じ配列リテラルsintaxを使用してspecifingでセットを宣言することができるか、彼らはまだArrayと推察されます。

let set: Set = ["Hello","Bye"] 

は、配列リテラルのプロトコルあなたに準拠するために

NSHipster
ドキュメント上の素敵なポストがあり

protocol ArrayLiteralConvertible { 
    typealias Element 
    init(arrayLiteral elements: Element...) 
} 

としてリテラルを定義:初期化子を提供しなければなりません

リテラルは、型の値のソースコード表現です(数字または文字列として など)。

リテラルは最初に定義されていますか?私はそれがコンパイラの義務だと思って、それらを検出し、適切な型に置き換えてください。

+0

私は私のカスタムサンプルを質問に入れました。カスタムクラスでこれを実装する方法を教えてください。 –

+0

私はそれを理解するのが難しいです、なぜ人は文字列のコレクションを持っていますか? PersonListオブジェクトを作成し、ArrayLiteralConvertibleまたはPersonオブジェクトに準拠させ、StringLiteralObjectに準拠させることができます。私は今、コードを書くことができません(私はiPad上にいる)が、NSHipsterの投稿を読んだら、それを行う方法について説明しています。 – Andrea

+0

OK、それはあくまで例です。 PersonListでもかまいません。 –

関連する問題