我有一个对象(UIViewController),它可能符合也可能不符合我定义的协议.
我知道我可以确定对象是否符合协议,然后安全地调用该方法:
if([self.myViewController conformsToProtocol:@protocol(MyProtocol)]) {
[self.myViewController protocolMethod]; // <-- warning here
}
Run Code Online (Sandbox Code Playgroud)
但是,XCode显示警告:
warning 'UIViewController' may not respond to '-protocolMethod'
Run Code Online (Sandbox Code Playgroud)
什么是防止此警告的正确方法?我似乎无法self.myViewController像一个MyProtocol班级一样.
有没有办法向编译器指示类对象是否符合协议?
据我所知,通过创建+(void)foo类方法,该类对象的实例将这些方法作为实例方法.因此,只要我+(void)foo为所有必需的协议方法创建方法,我就可以让一个类对象充当委托.
我的问题当然是在类的头文件中,我只知道如何指示类的实例符合协议(通常是这种情况).所以,我发现最好的是像这样抛出类对象:
something.delegate = (id<SomethingDelegate>)[self class]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
相关但不同: ObjC:有没有"类协议"这样的东西?