Je rencontre des problèmes pour essayer de limiter les exigences de type générique aux types de référence. Voici quelques exemples de code:Type de référence générique Swift
class WeakHolder<Element: AnyObject> {
weak var element: Element?
init(element: Element) {
self.element = element
}
}
protocol Animal: class { }
class Dog: Animal { }
let dog: Animal = Dog()
let holder = WeakHolder<Animal>(element: dog) // Error: Using "Animal" as a concrete type conforming to protocol 'AnyObject' is not supported.
Si je change l'exigence générique <Element: class>
, je reçois l'erreur class constraint can only appear on protocol declarations
.
Est-ce une limitation des génériques? Marquer un protocole comme une classe est suffisant pour avoir une faible référence à ce protocole, n'y at-il pas d'équivalent dans les génériques?
Le chien n'est pas un AnyObject puisque Dog est un protocole –
D'après ma petite expérience, cela pourrait être une limitation pour les génériques à partir de swift 2.3. Vous pouvez être en mesure de résoudre ce problème en utilisant des classes au lieu de protocoles –
J'ai besoin d'utiliser des protocoles dans mon implémentation. – Mark