2017-04-13 55 views
6

首先,感謝您的訪問。我目前正在使用Swift 3.1嵌套泛型,並且在初始化時遇到了一個錯誤。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"]) 

然而,我收到錯誤消息,

GenericCache(0x11102a518):檢測到的環狀的元數據依賴性,中止

我不知道爲什麼會發生這種情況。你們能幫忙嗎?謝謝!

+1

當我爲每個'Gadget'和'Company'移除'case others(T)'時,它似乎工作。 –

+1

你是「鮑勃李」嗎? :D –

+2

哈哈,我去了Bob的開發者:) –

回答

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

謝謝:)我會多研究一下間接枚舉! –