ObjectiveC.swift
Файл из стандартной библиотеки содержит следующие несколько строк кода вокруг линии 228:
extension NSObject : Equatable, Hashable {
/// ...
open var hashValue: Int {
return hash
}
}
Что open var
означает в этом контексте, или каково open
ключевое слово в целом?
open
иpublic
?»)Ответы:
open
новый уровень доступа в Swift 3, введенный с реализациейОн доступен со снимком Swift 3 от 7 августа 2016 года и с Xcode 8 beta 6.
Коротко:
open
Класс доступен и подклассы вне определяющего модуля. Членopen
класса доступен и может быть переопределен вне определяющего модуля.public
Класс доступен , но не подклассы вне определяющего модуля. Членpublic
класса доступен, но не может быть переопределен вне определяющего модуля.То
open
же самое, чтоpublic
было в предыдущих выпусках Swift, и доступ к нимpublic
был ограничен. Или, как говорит Крис Латтнер в SE-0177: Разрешить различие между публичным доступом и общедоступностью :В вашем примере
open var hashValue
это свойство, которое доступно и может быть переопределено вNSObject
подклассах.Для большего количества примеров и деталей, посмотрите на SE-0117 .
источник
public
в Swift 3 это какpublic final
в Swift 2, иopen
это какpublic
?Читать как открытый
Я повторяю открытость для наследования в других модулях. Таким образом, открытый класс открыт для создания подклассов в других модулях, которые включают определяющий модуль. Открытые переменные и функции открыты для переопределения в других модулях. Это наименее ограниченный уровень доступа. Это так же хорошо, как публичный доступ признает, что что-то публичное закрыто для наследования в других модулях.
Из Apple Docs :
источник
Open - это уровень доступа, который был введен для ограничения наследования классов в Swift.
Это означает, что уровень открытого доступа может применяться только к классам и членам класса .
В классах
Открытый класс может быть разделен на подклассы в модуле, в котором он определен, и в модулях, которые импортируют модуль, в котором определен класс.
В классе
То же самое относится и к ученикам. Открытый метод может быть переопределен подклассами в модуле, в котором он определен, и в модулях, которые импортируют модуль, в котором определен метод.
НЕОБХОДИМОСТЬ ЭТОГО ОБНОВЛЕНИЯ
Некоторые классы библиотек и каркасов не предназначены для подклассов, и это может привести к непредвиденному поведению. Собственная библиотека Apple также не позволяет переопределять те же методы и классы,
Таким образом, после этого добавления они будут применять уровни общего и частного доступа соответственно.
Для более подробной информации смотрите документацию Apple по контролю доступа
источник
За исключением подкласса, an
open class func
также доступен из любой точки вашего проекта. Скажем, вы определяете функцию открытого класса в своем классе Util следующим образомЗатем в любом месте ваших контроллеров представления вы можете просто получить доступ к этому методу, вызвав
источник
open приходят играть при работе с несколькими модулями.
Открытый класс доступен и подклассифицирован вне определяющего модуля. Открытый член класса доступен и может быть переопределен вне определяющего модуля.
источник
open предназначен только для другого модуля, например: какао-бобы или модульный тест, мы можем наследовать или переопределять
источник