是否有可能获得 swift 协议(protocol)的所有实现者的名称..?如果是的话怎么办..?
我正在尝试编写一个公开具有所有静态方法的协议(protocol)的 SDK,我不想在这里实现委托(delegate)模式,因为我想获取所有实现者的名称并直接调用方法。
最佳答案
所以我就是这样做的:
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
}
关于ios - 找出 swift 协议(protocol)的所有实现者的名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51573383/