gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:23:28 24 4
gpt4 key购买 nike

是否有 Swift Mirror API 调用可以告诉我对象符合哪些协议(protocol),即:

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

class User : A, C {}

如果我有下面的代码,它会打印出 A & C

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

最佳答案

在 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)
}

您的每个协议(protocol)都必须以 @objc 为前缀,并且您的类必须继承自 NSObject

关于Swift Mirror API - 对象符合哪些协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37527976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com