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