0
我試圖創建斯威夫特4的簡單類型消除結構:「分段錯誤:11」通用類
protocol DataProvider
{
associatedtype ItemType
subscript(index: Int) -> ItemType { get }
}
struct AnyDataProvider<providerType: DataProvider> : DataProvider
{
private var _subscript: (_ index: Int) -> providerType.ItemType
init<P : DataProvider>(_ base: P) where P.ItemType == providerType.ItemType
{
_subscript = base.subscript
}
subscript(index: Int) -> providerType.ItemType
{
return _subscript(index)
}
}
但我得到一個分段錯誤:在聲明瞭初始化器行11 。
任何想法,除了報告它作爲一個錯誤嗎?
這不是類型擦除。你的'AnyDataProvider'由一個'DataProvider'參數化。你所要做的就是試着將一個DataProvider看作是一個不同的DataProvider(沒有明顯的好處,因爲類型相同)。如果你真的想擦除DataProvider,那麼你的'AnyDataProvider'應該由'ItemType'本身來參數化,而不是'DataProvider'。 –