gpt4 book ai didi

Objective-C:id,访问实例属性,合成?

转载 作者:太空狗 更新时间:2023-10-30 03:49:04 26 4
gpt4 key购买 nike

我是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com