【发布时间】:2018-04-11 06:30:50
【问题描述】:
在最新版本的 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 个变量。例如,我不想硬编码一个键数组,因为有人可能会向协议添加一个新变量但忘记更新该数组。我希望它在运行时是动态的。
【问题讨论】:
-
@zombie 这适用于 Objective-C 协议,因为 Objective-C 是一种完全动态的语言,但它不适用于原生 Swift 协议。