приведение к (id <protocol>), чтобы гарантировать, что собственность там - PullRequest
15 голосов
/ 21 декабря 2010

если у меня есть несколько классов с чем-то вроде

@property (nonatomic, retain) NSString* myString;

и хочу получить доступ к этому свойству в объекте, который является одним из этих классов (но не знаю, какой именно это тип ID), я, очевидно, получаю «запрос на член 'myString' в чем-то, что не является структурой или объединением" ошибка.

, поэтому, если каждый из этих классов соответствует:

@protocol myProtocol <NSObject>

@required

@property (nonatomic, retain) NSString* myString;

@end

тогда я разыгрываю вот так, чтобы получить свойство:

(id<myProtocol>)anObject.myString

почему это не работает? я все еще получаю ту же ошибку.

Ответы [ 2 ]

31 голосов
/ 21 декабря 2010

В этом случае я предпочитаю нотацию отправки сообщений точечной нотации, как это ясно показывает, когда произойдет приведение:

Эти строки равны:

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

А это:

(id<MyProtocol>)[anObject myString]
(id<MyProtocol>)anObject.myString
6 голосов
/ 21 декабря 2010

игнорировать это .. получается просто нужно больше скобок:

((id<myProtocol>)anObject).myString
...