找出所有Swift协议实现者的名字

时间:2018-07-28 16:51:06

标签: ios swift protocols swift4 implementation

是否可以获取swift协议的所有实现者的名称?如果可以的话..?

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

1 个答案:

答案 0 :(得分:0)

这就是我的做法:

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?