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

Jas*_*ker 19 c# properties objective-c

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

public int prop { get; protected set;}
Run Code Online (Sandbox Code Playgroud)

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

Bar*_*ark 24

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

@property (readonly) NSInteger prop;
Run Code Online (Sandbox Code Playgroud)

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

@interface MyClass ()
@property (readwrite) NSInteger prop;
@end

@implementation MyClass
@synthesize prop;
...
@end
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你压倒其他东西,那么一点点的明确性也不会受到伤害. (2认同)