Я некоторое время пользуюсь ObjectMapper
и нахожу трудным написать функцию карты для классов с большим количеством свойств, используя способ, описанный в документах:
func mapping(map: Map) {
username <- map["username"]
age <- map["age"]
weight <- map["weight"]
array <- map["array"]
dictionary <- map["dictionary"]
bestFriend <- map["bestFriend"]
friends <- map["friends"]
}
Интересно, возможно ли этоиспользовать отражение, чтобы написать функцию карты, как показано ниже, предполагая, что мои данные JSON и мой класс имеют точно такие же имена свойств:
func mapping(map: Map) {
let names = Mirror(reflecting: self).children.flatMap { $0.label }
for name in names {
self.value(forKey: name) <- map[name]
}
}
ОБНОВЛЕНИЕ:
На основании ответа Sweeper IЯ обновил мой код:
func mapping(map: Map) {
for child in Mirror(reflecting: self).children.compactMap({$0}) {
child <- map[child.label]
}
}
Я думаю, это должно сработать.
ОБНОВЛЕНИЕ 2:
Благодаря Sweeper я нашел свойпервоначальное предположение было неверным, и Child
- это всего лишь набросок шрифта для:
public typealias Child = (label: String?, value: Any)
Так что моя вторая попытка также не сработает.