我有一个对象(一个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;
这个答案和@andy的答案都是正确的,但他的更加正确。 - memmonsUIViewController
中声明的消息发送给我答案中的vc
,而它被声明为id<MyProtocol>
,那么会发生什么? - Nick Forgeid
抛弃类型信息会带来问题的一个例子:https://gist.github.com/nsforge/7743616 - Nick Forge