В Swift используется обычный способ определения общего шаблона, в котором свойство должно быть внешне readonly, но модифицировано внутри класса (и подклассов), которые его владельцы.
В Objective-C имеются следующие опции:
- Объявить свойство как readonly в интерфейсе и использовать расширение класса для доступа к свойству внутри. Это доступ к сообщениям, поэтому он отлично работает с KVO, атомарностью и т.д.
- Объявить свойство как только для чтения в интерфейсе, но внутренне получить доступ к внутреннему ivar. Поскольку доступ по умолчанию для ivar защищен, это хорошо работает в иерархии классов, где подклассы также смогут изменять значение, но поле в противном случае является только для чтения.
В Java соглашение:
- Объявить защищенное поле и реализовать общедоступный метод get-get-only-only.
Какая идиома для Swift?