Swift Mirror API - 对象符合哪些协议

时间:2016-05-30 14:21:15

标签: swift reflection mirror

是否有Swift Mirror API调用可以告诉我对象符合的协议,即:

protocol ProtocolA {}
protocol ProtocolB {}
protocol ProtocolC {}

class User : A, C {}

然后,如果我有以下代码,它将打印出A& ç

let u = User()
let mirror = Mirror(reflecting: u)
let protocols = mirror.whichProtocols() // Made up code
print(protocols) //A & C

1 个答案:

答案 0 :(得分:2)

在Swift中根本不可能。快速反思是非常有限的事情。如果您愿意将课程与ObjC联系起来,您可以使用ObjC Runtime functions获得您想要的内容:

@objc protocol ProtocolA {}
@objc protocol ProtocolB {}
@objc protocol ProtocolC {}

class User : NSObject, ProtocolA, ProtocolC {}

var count: UInt32 = 0
let protocols = class_copyProtocolList(User.self, &count)

for i in 0..<Int(count) {
    let cname = protocol_getName(protocols[i])
    let name = String.fromCString(cname)

    print(name)
}

您的每个协议都必须以@objc为前缀,并且您的班级必须从NSObject继承。