C#中公共get / protected set属性的Objective-C等价物是什么

有没有办法在Objective-C中创建像这个C#属性的属性?

public int prop { get; protected set;} 

从本质上讲,我希望能够从类外获取值,但只能从类中设置值。

完成此操作的最简单方法是在MyClass的公共接口(即.h文件)中将属性声明为readonly

 @property (readonly) NSInteger prop; 

然后,在该类的.m文件中,声明一个类扩展 (具有空名称的类别)。 在类扩展中,您可以重新声明 @property以将其可写性更改为readwrite:

 @interface MyClass () @property (readwrite) NSInteger prop; @end @implementation MyClass @synthesize prop; ... @end 

当然,Objective-C不会强制实施访问限制,因此没有什么可以阻止某些恶意代码调用-[MyClass setProp:] 。 编译器会将此标记为警告,但这与您在Objective-C中可以获得的一样好。 不幸的是,没有标准的方法将这个“受保护的”可写属性记录到子类; 你必须为你的团队制定一个约定,或者如果它在你要发布的框架中,就把它放在该类的公共文档中。

我相信你正在寻找@property上的readonly属性

 @property (readonly) NSInteger prop; 

在这里阅读更多。

在ObjC中无法创建@ private / @ protected方法,这些编译器直接仅适用于实例变量。 但是,您可以在同一文件中声明静态C函数以获取“@private”方法。

基诺的答案似乎是实现这一目标的最正确方法。