Подтвердить что ты не робот

"Невозможно наследовать из не-открытого класса" swift

Как и в Xcode 8 beta 6, теперь я получаю ошибку компиляции "Не удается наследовать из не открытого класса (класса)" вне его определяющего модуля "

Класс I, наследуемый от, был частью отдельной среды Swift, но мой проект был скомпилирован для Xcode 8 beta 5. Что мне нужно изменить, чтобы снова скомпилировать мой проект?

4b9b3361

Ответ 1

Нашел ответ сам.

В Swift 3 теперь вы можете пометить класс как open вместо public, что позволяет файлам вне модуля подклассифицировать этот класс.

Просто замените public в классе вашего модуля на open.

Ссылка здесь.

Ответ 2

Класс, который вы наследуете, должен быть определен как open вместо public.

Немного больше контекста об изменениях в управлении доступом в Swift 3:

Swift 2 имел только 3 уровня доступа:

  • private: объекты доступны только из исходного файла, где они определены.
  • internal: объекты доступны для всего модуля, который включает определение.
  • public: объекты предназначены для использования в качестве API и могут быть доступны любым файлом, который импортирует модуль.

Swift 3 добавляет еще 2 уровня доступа (open и fileprivate) и меняет значение private:

  • private: символ отображается только в текущей декларации.
  • fileprivate: символ, видимый в текущем файле.
  • internal: символ, видимый в текущем модуле.
  • public: символ, видимый вне текущего модуля.
  • open: для класса или функции, подлежащей подклассу или переопределенной за пределами текущего модуля.