Класс, помеченный как open, является нефинальным. Ключевое слово open в Swift позволяет другим модулям (а не только внутри того же модуля, что и public) наследовать от этого класса и переопределять его методы и свойства. Класс без open или final по умолчанию является internal и может быть унаследован только внутри того же модуля. Класс, помеченный как final, не может быть унаследован вообще.
Сравнительная таблица:
| Ключевое слово | Наследование (в том же модуле) | Наследование (в других модулях) | Переопределение (в том же модуле) | Переопределение (в других модулях) | По умолчанию (без open/public/internal/fileprivate/private и final) |
|---|---|---|---|---|---|
open | Да | Да | Да | Да | Нет (по умолчанию internal) |
public | Да | Нет | Да | Нет | Нет (по умолчанию internal) |
internal | Да | Нет | Да | Нет | Да |
fileprivate | Нет | Нет | Да | Нет | Нет (по умолчанию internal) |
private | Нет | Нет | Да | Нет | Нет (по умолчанию internal) |
final | Нет | Нет | Нет | Нет | Нет (может быть вместе с open - что нелогично, или с другими уровнями доступа) |
Пример:
swift