У меня есть объект (UIViewController), который может соответствовать или не соответствовать определенному мною протоколу.
Я знаю, что могу определить, соответствует ли объект протоколу, а затем безопасно вызвать метод:
if([self.myViewController conformsToProtocol:@protocol(MyProtocol)]) {
[self.myViewController protocolMethod]; // <-- warning here
}
Однако XCode показывает предупреждение:
warning 'UIViewController' may not respond to '-protocolMethod'
Как правильно предотвратить это предупреждение? Я не могу бросить self.myViewController
как MyProtocol
класс.
источник
id<MyProtocol> p = (id<MyProtocol>)self.myViewController;
Этот ответ и @andys оба правильно, но его это более правильно.UIViewController
вvc
в примере в моем ответе, и это объявлено какid <MyProtocol>
?id
является проблемой: gist.github.com/nsforge/7743616Вы можете использовать это так:
Это тоже меня немного подбросило. В Objective-C протокол - это не сам тип, поэтому вам нужно указать
id
(или какой-либо другой тип, напримерNSObject
) вместе с протоколом, который вы хотите.источник
(id)
тоже работает. Это дурной тон?