Objective-C属性,只读公开,但有私有的setter

Ada*_*nst 63 properties objective-c

我想使用@property语法声明一个公开只读的合成属性,但有一个可以在类中私下调用的setter.

由于它是Objective-C,这基本上意味着该setFoo:方法将被合成,但在类本身之外调用它将导致警告(无法识别的选择器).要触发警告,我必须申报该财产readonly; 有没有办法强制合成的setter只在类中可用?

小智 102

我认为你正在寻找的是类扩展.您可以在标头中将该属性声明为只读:

@interface MyClass : NSObject {
}

@property (readonly, assign) NSInteger myInteger;

@end
Run Code Online (Sandbox Code Playgroud)

然后在实现文件中的类扩展中重新声明:

@interface MyClass ()

@property (readwrite, assign) NSInteger myInteger;

@end


@implementation MyClass

@end
Run Code Online (Sandbox Code Playgroud)

有关Apple的文档,请查看更多信息

  • 更新的文档链接:http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html#//apple_ref/doc/uid/TP40011210-CH6-SW3 (5认同)
  • 这是在保持必要封装的同时利用属性的便利性的好方法.:)喜欢这个能力. (3认同)