web-dev-qa-db-fra.com

"Impossible d'hériter d'une classe non ouverte" swift

Depuis Xcode 8 beta 6, j'obtiens maintenant l'erreur de compilation "Impossible d'hériter d'une classe non ouverte (Classe)" en dehors de son module de définition "

La classe dont j'héritais faisait partie d'un framework Swift mais mon projet compilé pour Xcode 8 beta 5. Que dois-je changer pour que mon projet se compile à nouveau?

26
LOP_Luke

J'ai trouvé la réponse moi-même.

Dans Swift 3 vous pouvez maintenant marquer une classe comme open au lieu de public cela permet aux fichiers en dehors du module de sous-classer cette classe.

Remplacez simplement public dans votre classe de module par open.

Référence ici .

48
LOP_Luke

La classe dont vous héritez doit être définie comme open au lieu de public.

Un peu plus de contexte sur les modifications apportées au contrôle d'accès dans Swift 3:

Swift 2 n'avait que 3 niveaux d'accès:

  • private: les entités sont disponibles uniquement à partir du fichier source où elles sont définies.
  • internal: les entités sont disponibles pour l'ensemble du module qui inclut la définition.
  • public: les entités sont destinées à être utilisées comme API et sont accessibles par n'importe quel fichier qui importe le module.

Swift 3 ajoute 2 niveaux d'accès supplémentaires (open et fileprivate) et change la signification de private:

  • private: symbole visible uniquement dans la déclaration courante.
  • fileprivate: symbole visible dans le fichier courant.
  • internal: symbole visible dans le module courant.
  • public: symbole visible en dehors du module courant.
  • open: pour la classe ou la fonction à sous-classer ou redéfinir en dehors du module courant.
21
Yann Bodson