В Swift - это обычный способ определения общего шаблона, в котором свойство должно быть доступно только для чтения извне, но может изменяться внутри класса (и подклассов), которому оно принадлежит.
В Objective-C есть следующие параметры:
- Объявите свойство как доступное только для чтения в интерфейсе и используйте расширение класса для внутреннего доступа к свойству. Это доступ на основе сообщений, поэтому он отлично работает с KVO, атомарностью и т. Д.
- Объявите свойство как доступное только для чтения в интерфейсе, но получите доступ к резервному ivar внутри. Поскольку доступ по умолчанию для ivar защищен, это хорошо работает в иерархии классов, где подклассы также могут изменять значение, но в противном случае поле доступно только для чтения.
В Java соглашение:
- Объявите защищенное поле и реализуйте общедоступный, доступный только для чтения метод (метод) получения.
Какая идиома у Swift?
источник
var
ключевое слово missing, чтобы оно скомпилировалось.)public
- он должен бытьinternal
или вообще ничего (по умолчанию используется любой класс -public
илиinternal
) - то естьprivate(set) var readonlyProperty: Int
private
теперь он ограничивается текущим объявлением (не файлом) иfileprivate
доступен для ограничения текущим файлом. Такжеpublic
имеет некоторые ограничения иopen
не требуется никаких ограничений. Подробности здесь .Согласно @Antonio, мы можем использовать одно свойство для доступа к
readOnly
значению свойства публично иreadWrite
конфиденциально. Ниже моя иллюстрация:И вот результат:
источник