Je suis en train de créer un simple struct d'effacement de type à Swift 4:« erreur de segmentation: 11 » dans la classe générique
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)
}
}
mais je reçois une erreur de segmentation: 11 sur la ligne qui déclare la initialiseur .
Des idées, en dehors de signaler comme un bug?
C'est le type-effacé pas. Votre 'AnyDataProvider' est paramétré par un' DataProvider'. Tout ce que vous faites est d'essayer de rendre possible le traitement d'un DataProvider comme s'il s'agissait d'un DataProvider différent (sans bénéfice évident, puisque les types sont identiques). Si vous voulez vraiment effacer le 'DataProvider', alors votre' AnyDataProvider' devrait être paramétré par le 'ItemType' lui-même, pas par un' DataProvider'. –