2017-04-13 3 views
6

Tout d'abord, merci de votre visite. Je joue actuellement avec Swift 3.1 Nested Generics et j'ai rencontré une erreur avec l'initialisation.Swift 3.1 Générique imbriqué Bug avec métadonnées cycliques

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 
    } 
} 

Maintenant, je tente d'initialiser

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

Cependant, je recevoir un message d'erreur,

GenericCache (0x11102a518): dépendance de métadonnées cyclique détecté, l'interruption

Je ne sais pas pourquoi cela se produit. Pourriez-vous les gars s'il vous plaît aider? Je vous remercie!

+1

Cela semble fonctionner quand je supprime 'case others (T)' pour chaque 'Gadget' et' Company'. –

+1

Êtes-vous "The Bob Lee"? : D –

+2

Haha, je vais par Bob le développeur :) –

Répondre

6

On dirait que cela est un problème connu: https://bugs.swift.org/browse/SR-3779

Cependant, j'ai pu contourner ce en marquant les énumérations indirects. Cela va stocker les valeurs associées dans un autre endroit qui rompt la dépendance cyclique.

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

Merci :) Je vais étudier un peu plus sur enum indirect! –