我有一个对象(UIViewController),它可能符合也可能不符合我定义的协议(protocol)。
我知道我可以确定对象是否符合协议(protocol),然后安全地调用方法:
if([self.myViewController conformsToProtocol:@protocol(MyProtocol)]) {
[self.myViewController protocolMethod]; // <-- warning here
}
但是,XCode 显示警告:
warning 'UIViewController' may not respond to '-protocolMethod'
阻止此警告的正确方法是什么?我似乎无法将 self.myViewController
转换为 MyProtocol
类。
最佳答案
这样做的正确方法是:
if ([self.myViewController conformsToProtocol:@protocol(MyProtocol)])
{
UIViewController <MyProtocol> *vc = (UIViewController <MyProtocol> *) self.myViewController;
[vc protocolMethod];
}
UIViewController <MyProtocol> *
类型转换转换为“vc 是符合 MyProtocol 的 UIViewController 对象”,而使用 id <MyProtocol>
转换为“vc 是符合 MyProtocol 的未知类的对象”。
这样编译器会给你正确的类型检查vc
- 只有在 UIViewController
上没有声明的任何方法时,编译器才会给你一个警告。或 <MyProtocol>
叫做。 id
仅应在您不知道要转换的对象的类/类型的情况下使用。
https://stackoverflow.com/questions/617616/
相关文章:
objective-c - 使用 NSPredicate 根据 NSDictionary 键过滤 N
objective-c - 容器 View Controller 示例
iphone - "wait_fences: failed to receive reply: 10
ios - 横向模式下的 iPhone 应用程序,2008 系统
objective-c - 从 NSString 中删除字符?
iphone - 是否有记录的方法来设置 iPhone 方向?
iphone - Xcode 调试器 : view value of variable