找出swift协议的所有实现者的名字
Find out the name of all the implementers of swift protocol
是否有可能获得 swift 协议的所有实施者的名称..?如果是那么如何..?
我正在尝试编写公开具有所有静态方法的协议的 SDK,我不想在这里实现委托模式,因为我想获取所有实现者的名称并直接调用这些方法。
所以我是这样做的:
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
}
感谢:
是否有可能获得 swift 协议的所有实施者的名称..?如果是那么如何..?
我正在尝试编写公开具有所有静态方法的协议的 SDK,我不想在这里实现委托模式,因为我想获取所有实现者的名称并直接调用这些方法。
所以我是这样做的:
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
}
感谢: