(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