Власність не може бути оголошена загальнодоступною, оскільки її тип використовує внутрішній тип


100

Я створив два класи Contentі Bucket. Bucketмістить масив Contentоб'єктів і викриває це через суспільну власність. Однак коли я це роблю, я отримую помилку:

Власність не може бути оголошена загальнодоступною, оскільки її тип використовує внутрішній тип

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

Будь-які думки щодо того, чому це викликає помилку?


Було б добре побачити спосіб викрити публіку лише базовий клас, як-отpublic(Array<NSObject>) let contents: Array<Content>
Бен Лег'єро

Відповіді:


174

Ви також повинні оголосити рівень доступу для загальнодоступних Contentкласів.

public class Content {
   // some code
}

Як зазначено в документації :

Публічна змінна не може бути визначена як внутрішня або приватна тип, оскільки тип може бути недоступним скрізь, де використовується загальнодоступна змінна.

Класи оголошуються internalза замовчуванням, тому вам потрібно додати publicключове слово, щоб зробити їх загальнодоступними.

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

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


3
Чудова відповідь. Я також виявив, що помилка не усунеться, поки Xcode (9.2) не буде перезапущено.
Jasongiss

9

Content також повинні бути оголошені публічними:

public class Content {}

Залежно від випадку використання ви також можете оголосити Bucketяк внутрішній. Просто пропустіть publicключове слово в цьому випадку.


1

Моя проблема була проблемою простору імен.

Я оголосив, що enum називається, Dataі це стосується Dataкласу Swift , особливо imageData: Dataвластивості в моделі Core Data.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.