jon*_*dep 15 protocols objective-c
如果我有一些类似的课程
@property (nonatomic, retain) NSString* myString;
Run Code Online (Sandbox Code Playgroud)
并且想要在作为这些类之一的对象中访问该属性(但不知道它是哪个类型id),我显然得到"请求成员'myString'而不是结构或联合"错误.
所以,如果这些类中的每一个都符合:
@protocol myProtocol <NSObject>
@required
@property (nonatomic, retain) NSString* myString;
@end
Run Code Online (Sandbox Code Playgroud)
然后我像这样投下来获得财产:
(id<myProtocol>)anObject.myString
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我仍然得到同样的错误.
Vik*_*ica 31
在这种情况下,我更喜欢使用点符号发送消息 - 因为它清楚显示,当演员阵容发生时:
这些线是相同的:
[(id<MyProtocol>)anObject myString]
((id<MyProtocol>)anObject).myString
Run Code Online (Sandbox Code Playgroud)
这些是:
(id<MyProtocol>)[anObject myString]
(id<MyProtocol>)anObject.myString
Run Code Online (Sandbox Code Playgroud)
忽略这个..结果只需要更多括号:
((id<myProtocol>)anObject).myString
Run Code Online (Sandbox Code Playgroud)