Wil*_*eur 5 objective-c synthesize
我对Objective-C很新,我想知道是否有一种简单的方法可以将id设置为对象实例(具有合成属性),并直接获取/设置这些属性,如:
id myID = myInstance;
myID.myProperty = something;
Run Code Online (Sandbox Code Playgroud)
其中myInstance是一个具有名为myProperty的合成属性的对象.当我这样做时:
myInstance.myProperty = something;
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是当我把它换成id时我得到了错误
在'_strong id'类型的对象上找不到属性'myProperty'
在使用id时,我是否必须手动制作getter/setter方法而不是使用synthesize?因为我似乎能够使id执行实例方法.
如果对象必须是类型id,则可以使用消息(而不是点符号)来访问getter/setter:
id myID = ...;
NSString *prop = [myID property];
[myID setProperty:@"new value"];
Run Code Online (Sandbox Code Playgroud)
但是你有更好的选择:
如果您知道对象的类,只需使用该类型创建一个变量.
id myID; // defined elsewhere
MyClass *obj = (MyClass *)myID; // if you know the class, make a variable with that type
obj.property = @"new value";
Run Code Online (Sandbox Code Playgroud)
在不创建新变量的情况下,使用内联强制转换来告诉编译器类型是什么.
id myID; // defined elsewhere
((MyClass *)myID).property = @"new value";
Run Code Online (Sandbox Code Playgroud)
如果您不知道对象的确切类,但是您知道它必须实现某些方法,则可以创建协议:
id<MyProtocol> myID; // the compiler knows the object implements MyProtocol
myID.property = @"new value";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2779 次 |
| 最近记录: |