2017-04-13 3 views
6

まずは訪問していただきありがとうございます。私は現在、Swift 3.1 Nested Genericsを使用しています。初期化でエラーが発生しました。アボート検出環状メタデータ依存性、Swift 3.1ネストジェネティックスのバグ(循環メタデータ付き)

class NestedProduct<T> { 

    enum Gadget { 
    case smartphone 
    case laptop 
    case fridge 
    case others(T) 
    } 

    enum Company { 
    case Samsung 
    case Apple 
    case Sony 
    case others(T) 
    } 

    let company: Company 
    let gadget: Gadget 

    let reviews: [T] 

    init(enterCompany: Company, enterGadget: Gadget, enterReView: [T]) { 
    company = enterCompany 
    gadget = enterGadget 
    reviews = enterReView 
    } 
} 

は今、私はエラーメッセージを表示し、しかし

let product = NestedProduct<String>(enterCompany: NestedProduct.Company.Apple, 
              enterGadget: NestedProduct.Gadget.laptop, 
              enterReView: ["Good"]) 

を初期化する(0x11102a518)

GenericCacheを試みます

なぜこれが起こるのかわかりません。みんな助けてくれますか?ありがとうございました!

+1

「ガジェット」と「会社」ごとに 'その他(T)'を削除するとうまくいくようです。 –

+1

あなたは「The Bob Lee」ですか? :D –

+2

ハハ、私はボブの開発者:) –

答えて

6

これは既知の問題であるように見える:https://bugs.swift.org/browse/SR-3779

はしかし、私は、間接として列挙型をマークすることによって、これを回避することができました。関連する値を別の場所に格納し、循環依存性を破棄します。

indirect enum Gadget { 
    case smartphone 
    case laptop 
    case fridge 
    case others(T) 
} 

indirect enum Company { 
    case Samsung 
    case Apple 
    case Sony 
    case others(T) 
} 
+0

ありがとう:)私は間接的な列挙についてもう少し詳しく学ぶ! –