Это старый вопрос, но ответ не работал на меня.
Мне пришлось сменить мой быстрый объект на NSObject, чтобы все работало, а также иметь динамические свойства.
В моем случае я использую маршала для десериализации данных.
class MyClass: NSObject, Unmarshaling
{
// @objc dynamic make property available for NSObject
@objc dynamic var myProperty: String?
required init(object: MarshaledObject) throws {
super.init()
initUsingReflection(object: object)
}
func initUsingReflection(object: MarshaledObject) {
let mirror = Mirror(reflecting: self)
// we go through children
for child in mirror.children {
guard let key = child.label else {
continue
}
// This line is here to get the value from json, in my case I already know the type I needed
let myValue: String = try! object.value(for: key)
// The trick is here, setValue only exist in NSObject and not in swift object.
self.setValue(myValue, forKey: key)
}
}
}
@ Randex Это рисунок, как преобразовать обратно в тип объекта, являющегося неотъемлемой частью. Если вы не хотите создавать пользовательские расширения для каждого типа, который вы когда-либо создавали. В быстрой 4 есть Декодируемый и Кодируемый. Они могут делать это динамически. – eonist