在最新版本的 Swift 中,有没有办法获取协议定义的所有变量?想象一下我有类似的东西:
protocol Foo {
var a: Double { get set }
var b: Double { get set }
}
class SomeClass: Foo {
var a: Double = 1
var b: Double = 2
var c: Int = 3
}
我想要一种获取SomeClass
对象并知道查询变量的方法a
,b
因为这是协议定义的两个。例如,我可能想总结协议中所有变量的值。例如,类似这种非功能代码的东西。
let obj = SomeClass()
let paths = Foo.allKeyPaths
let total = paths.reduce(0) { $0 + obj[keyPath: $1] }
在我的实际用例中,该协议有大约 20 个变量。例如,我不想硬编码一个键数组,因为有人可能会向协议添加一个新变量但忘记更新该数组。我希望它在运行时是动态的。