ios - 找出 swift 协议(protocol)的所有实现者的名字

标签 ios swift protocols swift4 implementation

是否有可能获得 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
}

感谢:How to list all classes conforming to protocol in Swift?

关于ios - 找出 swift 协议(protocol)的所有实现者的名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51573383/

相关文章:

networking - 字节中的位顺序重要吗?

javascript - 获取 http/https 协议(protocol)以匹配 maps.google.com 的 &lt;iframe&gt;

iOS10 : German Localization not working

javascript - React Native Listview 留下空间

ios - 基于C#程序的Swift电话词生成器实现

swift - 如何以编程方式将图像放入 SegmentController - Swift

ios - 如何在reactjs中实现iphone的点击状态栏滚动到顶部

ios - 多点连接 手动连接/管理对等点

ios - 与 Facebook Messenger 分享文本

swift - 通用符合协议(protocol)和类(UITableViewCell)