首页 > 解决方案 > 找出所有swift协议实现者的名字

问题描述

是否有可能获得 swift 协议的所有实现者的名称..?如果是那么如何..?

我正在尝试编写和 SDK,它公开了一个具有所有静态方法的协议,我不想在这里实现委托模式,因为我想获取所有实现者的名称并直接调用这些方法。

标签: iosswiftprotocolsswift4implementation

解决方案


所以我就是这样做的:

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 中列出所有符合协议的类?


推荐阅读