Свойство нельзя объявить общедоступным, поскольку его тип использует внутренний тип.

101

Я создал два класса Contentи Bucket. Bucketсодержит массив Contentобъектов и предоставляет его через общедоступное свойство. Однако при этом я получаю сообщение об ошибке:

Свойство нельзя объявить общедоступным, поскольку его тип использует внутренний тип.

введите описание изображения здесь

Есть мысли о том, почему это вызывает ошибку?

Стив
источник
Было бы неплохо увидеть способ представить публике только базовый класс, напримерpublic(Array<NSObject>) let contents: Array<Content>
Бен Легжеро

Ответы:

175

Вы также должны объявить уровень доступа Contentкласса public.

public class Content {
   // some code
}

Как указано в документации :

Общедоступная переменная не может быть определена как имеющая внутренний или частный тип, поскольку этот тип может быть недоступен везде, где используется общедоступная переменная.

Классы объявлены internalпо умолчанию, поэтому вам нужно добавить publicключевое слово, чтобы сделать их общедоступными.

Аналогичное правило существует и для функций.

Функция не может иметь более высокий уровень доступа, чем ее типы параметров и тип возвращаемого значения, потому что функция может использоваться в ситуациях, когда ее составляющие типы недоступны для окружающего кода.

Джихан Тек
источник
3
Отличный ответ. Я также обнаружил, что ошибка не исчезнет, ​​пока Xcode (9.2) не будет перезапущен.
Jasongiss
9

Content также должны быть объявлены общедоступными:

public class Content {}

В зависимости от вашего варианта использования вы также можете объявить его Bucketвнутренним. publicВ этом случае просто опустите ключевое слово.

Корактор
источник
1

Моя проблема заключалась в проблеме с пространством имен.

Я объявил вызываемое перечисление, Dataи это мешало Dataклассу Swift , особенно imageData: Dataсвойству в модели Core Data.

пкамб
источник