La propriété ne peut pas être déclarée publique car son type utilise un type interne


101

J'ai créé deux classes Contentet Bucket. Bucketcontient un tableau d' Contentobjets et les expose via une propriété publique. Cependant, lorsque je le fais, je reçois l'erreur:

La propriété ne peut pas être déclarée publique car son type utilise un type interne

entrez la description de l'image ici

Avez-vous une idée de pourquoi cela soulève une erreur?


Ce serait bien de voir un moyen d'exposer uniquement une classe de base au public, commepublic(Array<NSObject>) let contents: Array<Content>
Ben Leggiero

Réponses:


175

Vous devez également déclarer le niveau d'accès de la Contentclasse public.

public class Content {
   // some code
}

Comme indiqué dans la documentation :

Une variable publique ne peut pas être définie comme ayant un type interne ou privé, car le type peut ne pas être disponible partout où la variable publique est utilisée.

Les classes sont déclarées comme internalpar défaut, vous devez donc ajouter le publicmot - clé pour les rendre publiques.

Une règle similaire existe également pour les fonctions.

Une fonction ne peut pas avoir un niveau d'accès supérieur à ses types de paramètres et à son type de retour, car la fonction pourrait être utilisée dans des situations où ses types constituants ne sont pas disponibles pour le code environnant.


3
Très bonne réponse. J'ai également constaté que l'erreur ne disparaîtrait pas avant le redémarrage de Xcode (9.2).
Jasongiss

9

Content doit également être déclaré public:

public class Content {
}

En fonction de votre cas d'utilisation, vous pouvez également le déclarer Bucketcomme interne. Omettez simplement le publicmot - clé dans ce cas.


1

Mon problème était un problème d'espace de noms.

J'avais déclaré une énumération appelée Dataet qui se moquait de la Dataclasse Swift , en particulier une imageData: Datapropriété dans un modèle Core Data.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.