Swift获取协议的所有KeyPath

时间:2018-04-11 06:30:51

标签: swift swift4 swift4.1

在最新版本的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) { $0 + obj[keyPath: $1] }

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

1 个答案:

答案 0 :(得分:1)

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