是否可以获取swift协议的所有实现者的名称?如果可以的话..?
我正在尝试使用SDK和SDK公开具有所有静态方法的协议,我不想在这里实现委托模式,因为我想获取所有实现者的名称并直接调用方法。
答案 0 :(得分:0)
这就是我的做法:
static func getClassesImplementingProtocol(_ protocolName: Protocol!) -> [AnyClass] {
var result = [AnyClass]();
let count: Int32 = objc_getClassList(nil, 0)
guard count > 0 else {
return result
}
let classes = UnsafeMutablePointer<AnyClass>.allocate(
capacity: Int(count)
)
defer {
classes.deallocate()
}
let buffer = AutoreleasingUnsafeMutablePointer<AnyClass>(classes)
for i in 0..<Int(objc_getClassList(buffer, count)) {
let someclass: AnyClass = classes[i]
if class_conformsToProtocol(someclass, protocolName) {
result.append(someclass);
}
}
return result
}