2016-09-21 9 views
0
私はスウィフト3 でモデル定義に取り組んでい

私は2つの単純な列挙型を持っています。 Field例えばような何か:列挙構造の作成

let fields: [Field : String] = [UserField.id : "1", CompanyField.name : "A name"] 

または

let fields: [Field] = [UserField.id, CompanyField.name] 

私はフィールドのプロトコルを作成しようとしているが、成功しませんでした。 (例:enum UserField: Field {}

2つの列挙型を1つのカスタムタイプに適合させるソリューションはありますか?

+0

は* ...成功せず*本当の問題について多くを教えていない、あなたの懸念は何ですか? – xhamr

+0

@ xhamrこの構造を達成する方法を知りたいですが、プロトコルを使用するのが正しいかどうかわかりません。もしそうなら、私はプロトコルのHashableコンパイルエラーがあります。私はHashableに準拠させようとしましたが、他のエラーが発生しました。 – Pierre

+0

問題は 'Hashable'に準拠した' Equatable'プロトコルに '自身'が関連付けられており、型宣言子として使用できないということです。ジェネリック関数でマップの作成をラップするという回避策をとることはできますが、同じマップ内に異なる列挙型を混在させることはありません。 – xhamr

答えて

0

これは、カスタムドメインプロトコルに準拠したenumを柔軟に表現でき、辞書や配列要素としても使用できます。 しかし、再び、dictのキーなど、異なる列挙型混在する場合は、この回避:

func map<K,V>(forFields fields: (K,V)...) -> [K:V] where K : Hashable{ 
    var dict = [K:V]() 
    fields.forEach { (key, value) in 
     dict[key as K] = value 
    } 
    return dict 
} 
map(forFields: (UserField.email, "email"), (UserField.id,"id")) 
関連する問題