Segmentation fault avec struct générique
Joanna Carter
Membre, Modérateur
J'essai de créer une struct pour un type erasure :
protocol DataProvider
{
associatedtype ItemType
subscript(index: Int) -> ItemType { get }
}
struct AnyDataProvider<providerType: DataProvider> : DataProvider
{
private var _subscript: (_ index: Int) -> providerType.ItemType
subscript(index: Int) -> providerType.ItemType
{
return _subscript(index)
}
init<P : DataProvider>(_ base: P) where P.ItemType == providerType.ItemType
{
_subscript = base.subscript
}
}
Mais je ne peux pas le compiler car je reçois un segmentation fault sur la ligne ou se trouve la déclaration pour l'init
des idées ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
L'accès à base.subscript semble poser problème au compilateur. J'imagine que le compilateur devrait sortir une erreur si le subscrit n'est pas considéré comme une méthode.
Simple supposition avec un test. En utilisant une "vrai" méthode cela compile.
Merci ! J'ai supposé que, étant donné qu'un subscript ressemble une méthode, que l'on puisse stocker une référence dans une var.
Malheureusement, non >:(
Maintenant, j'ai :
Juste parce que je peux >:D
Plus sérieusement, voici le code, fait avec l'aide de Slava Pestov d'Apple qui m'a montré le truc pour assigner le subscript :