转换为(id <protocol>)以保证属性存在</protocol>

时间:2010-12-21 10:15:17

标签: objective-c protocols

如果我有许多类似

的课程
@property (nonatomic, retain) NSString* myString;

并且想要在作为这些类之一的对象中访问该属性(但不知道它是哪个类型id),我显然得到“请求成员'myString',而不是结构或联合”错误。

所以,如果这些类中的每一个都符合:

@protocol myProtocol <NSObject>

@required

@property (nonatomic, retain) NSString* myString;

@end

然后我像这样投了财产:

(id<myProtocol>)anObject.myString

为什么这不起作用?我仍然得到同样的错误。

2 个答案:

答案 0 :(得分:31)

在这种情况下,我更喜欢使用点符号发送消息 - 因为它清楚显示,当演员阵容发生时:

这些行是相同的:

[(id<MyProtocol>)anObject myString]
((id<MyProtocol>)anObject).myString

这些是:

(id<MyProtocol>)[anObject myString]
(id<MyProtocol>)anObject.myString

答案 1 :(得分:6)

忽略这个......结果只需要更多括号:

((id<myProtocol>)anObject).myString