【发布时间】:2016-11-27 17:42:54
【问题描述】:
我正在尝试 readwrite 来自 API 类的变量,这些变量是 readonly
是否可以从那些只读变量中获取它们的设置器?
请注意,我无法访问这些类,因为它们来自私有 API。
这是一个例子:
私有 APIAxes.h
@interface APIAxes
@property (nonatomic, readonly) double x;
@property (nonatomic, readonly) double y;
@property (nonatomic, readonly) double z;
@end
我的 AxesClass.m
@property (nonatomic) APIAxes *apiA;
- (void)updateAxes
{
APIAxes *temp = [APIAxes alloc];
temp.x = 0.1; //Error x variable is readonly
temp.y = 0.2; //Error y variable is readonly
temp.z = 0.3; //Error z variable is readonly
self.apiA = temp; // This works
}
【问题讨论】:
-
如果你无权访问类的实现,那是不可能的。是不是有一个方便的初始化器来创建
APIAxes与向量?顺便说一句,您必须分配 并初始化 类[[APIAxes alloc] init]; -
乔希的回答是正确的,尽管我认为需要一个更大的免责声明;这样做几乎肯定是错误的。这些属性是
readonly是有原因的,并且更改值可能会破坏许多内部 API 假设;结果可能是错误的,甚至是危险的。如果您没有可用的初始化程序来创建您自己的APIAxes值,我猜APIAxes值要么被 API 出售(在这种情况下,您误用了该类型,应该创建自己的),或者传入(在这种情况下,您不应提供任意数据)。 -
我想我的问题是,你能澄清一下为什么你认为你需要这样做吗?可能有更好的方法来解决这个问题。
标签: objective-c encapsulation readonly getter-setter read-write