Swift 获取协议的所有 KeyPath

Swift get all KeyPath for a protocol

在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 对象并知道查询变量 ab 的方法,因为协议定义了这两个变量。例如,我可能想总结协议中所有变量的值。例如像这样的非功能代码。

let obj = SomeClass()
let paths = Foo.allKeyPaths
let total = paths.reduce(0) { [=12=] + obj[keyPath: ] }

在我的实际用例中,协议有大约 20 个变量。例如,我不想对键数组进行硬编码,因为有人可能会向协议添加新变量但忘记更新该数组。我希望它在运行时是动态的。

不幸的是,这在 Swift 的当前版本中是不可能的。