【问题标题】:Swift get all KeyPath for a protocolSwift 获取协议的所有 KeyPath
【发布时间】: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 对象并知道查询变量ab 的方法,因为这两个是协议定义的。例如,我可能想总结协议中所有变量的值。例如类似这样的非功能代码。

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

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

【问题讨论】:

  • @zombie 这适用于 Objective-C 协议,因为 Objective-C 是一种完全动态的语言,但它不适用于原生 Swift 协议。

标签: swift swift4 swift4.1


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多