【问题标题】:Find out the name of all the implementers of swift protocol找出所有swift协议实现者的名字
【发布时间】:2018-08-25 21:24:32
【问题描述】:

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

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

【问题讨论】:

  • 如果您没有委托(对实现您的协议的类的弱引用),那么拥有协议的全部意义是什么?您打算如何将所有对象放入内存中?并手动调用方法
  • 请不要和框架打架????
  • 感谢您的回复,我明白这将是一个可怕的设计,我正在做一些实验,我想知道这是否可能以及如何。所以我发现了一个类似的老问题:stackoverflow.com/questions/34415028/… 这有点用。谢谢

标签: ios swift protocols swift4 implementation


【解决方案1】:

这就是我的做法:

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?

【讨论】:

    猜你喜欢
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多