我是 Objective-C 的新手,我想知道是否有一种简单的方法可以将 id 设置为对象实例(具有合成属性),并直接获取/设置这些属性,例如:
id myID = myInstance;
myID.myProperty = something;
其中 myInstance 是一个具有名为 myProperty 的合成属性的对象。当我这样做时:
myInstance.myProperty = something;
它可以工作,但是当我将它切换为 id 时出现错误
Property 'myProperty' not found on object of type '_strong id'
在使用 id 时,我是否必须手动创建 getter/setter 方法而不是使用 synthesize?因为我似乎确实能够让 id 执行实例方法。
最佳答案
如果对象必须是id
类型,您可以使用消息(而不是点符号)来访问getters/setters:
id myID = ...;
NSString *prop = [myID property];
[myID setProperty:@"new value"];
但是你有更好的选择:
声明一个新变量
如果您知道对象的类,只需创建一个具有该类型的变量即可。
id myID; // defined elsewhere
MyClass *obj = (MyClass *)myID; // if you know the class, make a variable with that type
obj.property = @"new value";
类型转换
使用内联转换告诉编译器类型是什么,而无需创建新变量。
id myID; // defined elsewhere
((MyClass *)myID).property = @"new value";
协议(protocol)
如果您不知道对象的确切类,但知道它必须实现某些方法,则可以创建一个协议(protocol):
id<MyProtocol> myID; // the compiler knows the object implements MyProtocol
myID.property = @"new value";
关于Objective-C:id,访问实例属性,合成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10227661/