В последней версии 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 переменных. Я не хочу жестко кодировать массив ключей, потому что кто-то может добавить новую переменную в протокол, но, например, забудет обновить этот массив. Я хочу, чтобы он был динамическим во время выполнения.