ios - 找出所有swift协议实现者的名字
问题描述
是否有可能获得 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
}
推荐阅读
- javascript - 导入函数并将setName添加到原型时出现错误“类型上不存在属性'setName',为什么?
- exception - 如何格式化来自 servlet 的响应,使 dojo 不返回异常
- java - 如何通过关键变量百里香从模型中获取模型图
- r - R更改条形顺序分组箱线图(填充变量)
- reactjs - ConnectedRouter TypeError:无法读取未定义的属性“调度”
- javascript - 如何在反应中超过最大更新深度
- sql - SQLServer 2008 中非相关表的条件更新
- ejabberd - 我可以在不重新启动服务器的情况下重新加载 ejabberd 模块吗?
- python - 从一组文件中读取 JSON / JSON 数组
- c# - 复制到剪贴板并将剪贴板数据粘贴到whatsapp消息文本框