有没有办法在Objective-C中创建像C#属性这样的属性?
public int prop { get; protected set;}
基本上,我希望能够从类外部获取值,但只能在类中设置值。
答案 0 :(得分:24)
实现此目的的最简单方法是在readonly
的公共接口(即.h文件)中将属性声明为MyClass
:
@property (readonly) NSInteger prop;
然后,在该类的.m文件中,声明一个类extension(一个具有空名称的类别)。在类扩展中,您可以redeclare @property将其可写性更改为readwrite:
@interface MyClass ()
@property (readwrite) NSInteger prop;
@end
@implementation MyClass
@synthesize prop;
...
@end
当然,Objective-C不会强制实施访问限制,因此没有什么可以阻止某些恶意代码调用-[MyClass setProp:]
。编译器会将此标记为警告,但这与Objective-C中的结果一样好。不幸的是,没有标准的方法将这个“受保护的”可写属性记录到子类;你必须为你的团队制定一个约定,或者如果它在你将要发布的框架中,就把它放在该类的公共文档中。
答案 1 :(得分:1)
答案 2 :(得分:1)
没有办法在ObjC中创建@ private / @ protected方法,这些编译器直接仅适用于实例变量。但是,您可以在同一文件中声明静态C函数以获取“@private”方法。
keno的回答似乎是实现这一目标的最正确方法。