Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 找出所有swift协议实施者的姓名_Ios_Swift_Protocols_Swift4_Implementation - Fatal编程技术网

Ios 找出所有swift协议实施者的姓名

Ios 找出所有swift协议实施者的姓名,ios,swift,protocols,swift4,implementation,Ios,Swift,Protocols,Swift4,Implementation,是否有可能获得swift协议所有实施者的姓名。。?如果是的话,那怎么办 我试图编写一个SDK,它公开了一个包含所有静态方法的协议,我不想在这里实现委托模式,因为我想得到所有实现者的名字,并直接调用这些方法 我就是这样做的: static func getClassesImplementingProtocol(_ protocolName: Protocol!) -> [AnyClass] { var result = [AnyClass](); let count: I

是否有可能获得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
}
static func getClassesImplementingProtocol(\uprotocolname:Protocol!)->[AnyClass]{
var result=[AnyClass]();
let count:Int32=objc_getClassList(nil,0)
防护计数>0其他{
返回结果
}

让classes=unsafemeutablepointer

如果没有委托,那么拥有协议的全部意义是什么(对实现协议的类的弱引用)?你打算如何在内存中获取所有对象?手动调用方法请不要与框架抗争谢谢你们的回复伙计们,我知道这将是一个可怕的设计。我正在做一些实验,我想知道这是否可能,以及如何实现。所以我发现了一个类似的老问题:哪种可行。谢谢你