Протокол CaseIterable
позволяет вам перебирать случаи перечисления, я хочу сделать это, но для статических свойств, а также получать его значения.Как бы вы реализовали теоретический протокол PropertyIterable
?
Я пытался использовать отражение (Mirror(reflecting:)
), оно работает на структурах, но не на перечислениях
Например:
protocol PropertyIterable {
var allProperties: [String: T] { get } //will get you [String: Any/T]
}
FYI : Возможно вычисляемое свойство allProprties
не определено должным образом.Но только для иллюстрации
enum Test: PropertyIterable {
static let foo = "blah"
static let bar = "blah2"
}
let test = Test.allProperties //will return ["foo": "blah", bar: "blah2"]
В настоящее время, когда я печатаю Mirror(describing: Test.self).children
, я получаю это:
AnyCollection<(label: Optional<String>, value: Any)>(_box: Swift._RandomAccessCollectionBox<Swift.LazyMapCollection<Swift.Range<Swift.Int>, (label: Swift.Optional<Swift.String>, value: Any)>>)