给定一个选择器
SEL selector = NSSelectorWithString(someSelectorName);
和协议:
Protocol protocol = NSProtocolFromString(someProtocolName);
我如何检查协议中定义的选择器?
BOOL hasSelector = protocolHasSelector(protocol, selector);
答案 0 :(得分:2)
Objective-C运行时提供名为protocol_getMethodDescription
的函数。您可以使用它来确定协议是否定义了选择器:
返回值
objc_method_description
结构,描述 aSel , isRequiredMethod 和 isInstanceMethod 为协议 p指定的方法如果协议不包含指定的方法,则返回值为
objc_method_description
的{{1}}结构。
要使用此功能,您必须{NULL, NULL}
或#import <objc/runtime.h>
。
请注意,您可能需要使用@import ObjectiveC
和isRequiredMethod
的每个值组合调用最多四次方法。如果你只关心实例方法(不是类方法),你可能仍然想要调用它两次(isInstanceMethod
YES
和isRequiredMethod
一次)。