(id <protocol>), чтобы гарантировать, что есть свойство

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

@property (nonatomic, retain) NSString* myString;

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

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

@protocol myProtocol <NSObject>

@required

@property (nonatomic, retain) NSString* myString;

@end

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

(id<myProtocol>)anObject.myString

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

Ответы

Ответ 1

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

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

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

И это:

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

Ответ 2

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

((id<myProtocol>)anObject).myString