如何在objective-c中的对象上创建动态属性? 在ActionScript中我们可以做这样的事情
var obj : Object;
obj[ "myDynamicProperty" ] = true;
trace( obj.myDynamicProperty );
我如何在objective-c中执行此操作?
我试过以下
NSObject *obj = [[NSObject alloc] init];
[obj setValue:@"labelValue" forKey:@"label"];
但是这只会引发运行时错误。 任何帮助将非常感激。 提前谢谢。
答案 0 :(得分:10)
Objects-NSObjects
,具体而言Objective-C
不允许使用KVC
在其上设置任意属性;也就是说,它们不是键值容器。如果您想要可以接受任意键值对的内容,请使用字典(NSMutableDictionary
)。
如果您足够舒适地下降到Obj-C
运行时,也可以使用关联的对象API。在文档中搜索objc_setAssociatedObject
,了解如何使用此API
。
答案 1 :(得分:3)
如果除了任意属性之外还需要自定义行为,则可以创建decorator对象。创建自己的包含NSMutableDictionary
实例变量的自定义类,然后编写自己的方法,只需在该内部字典上调用setValue:forKey:
等等。
答案 2 :(得分:0)
Objective-C中的对象通常不会以这种方式工作。使用runtime functions是可能的,但求助于运行时函数很尴尬,通常不是惯用的。如果需要任意键值存储,请使用NSMutableDictionary。
通常,在Objective-C中这是一个很好的做法,因此每个对象都有一组固定的属性,而不是像我们有时在ActionScript / Javascript中那样在 ad hoc 上添加它们。