Id нравится объявлять публичное неизменяемое свойство:
@interface Foo
@property(strong, readonly) NSSet *items;
@end
... поддерживаемый с помощью изменяемого типа в файле реализации:
@interface Foo (/* private interface*/)
@property(strong) NSMutableSet *items;
@end
@implementation
@synthesize items;
@end
То, что я хочу, - это изменяемая коллекция в реализации, которая бросается в неизменяемую при доступе извне. (Меня не волнует, что вызывающий может вернуть экземпляр обратно в NSMutableSet
и сломать инкапсуляцию. Я живу в тихом, приличном городе, где таких вещей не бывает.)
В настоящий момент мой компилятор рассматривает свойство как NSSet
внутри реализации. Я знаю, что есть много способов заставить его работать, например, с пользовательскими getters, но есть ли способ сделать это просто с объявленными свойствами?