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?
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 .
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.