Ответ 1
Нашел ответ сам.
В Swift 3 теперь вы можете пометить класс как open
вместо public
, что позволяет файлам вне модуля подклассифицировать этот класс.
Просто замените public
в классе вашего модуля на open
.
Ссылка здесь.
Как и в Xcode 8 beta 6, теперь я получаю ошибку компиляции "Не удается наследовать из не открытого класса (класса)" вне его определяющего модуля "
Класс I, наследуемый от, был частью отдельной среды Swift, но мой проект был скомпилирован для Xcode 8 beta 5. Что мне нужно изменить, чтобы снова скомпилировать мой проект?
Нашел ответ сам.
В Swift 3 теперь вы можете пометить класс как open
вместо public
, что позволяет файлам вне модуля подклассифицировать этот класс.
Просто замените public
в классе вашего модуля на open
.
Ссылка здесь.
Класс, который вы наследуете, должен быть определен как open
вместо public
.
Немного больше контекста об изменениях в управлении доступом в Swift 3:
Swift 2 имел только 3 уровня доступа:
private
: объекты доступны только из исходного файла, где они определены.internal
: объекты доступны для всего модуля, который включает определение.public
: объекты предназначены для использования в качестве API и могут быть доступны любым файлом, который импортирует модуль.Swift 3 добавляет еще 2 уровня доступа (open
и fileprivate
) и меняет значение private
:
private
: символ отображается только в текущей декларации.fileprivate
: символ, видимый в текущем файле.internal
: символ, видимый в текущем модуле.public
: символ, видимый вне текущего модуля.open
: для класса или функции, подлежащей подклассу или переопределенной за пределами текущего модуля.