有一类内部有字段的类,我想通过Swift Reflection命名为 Mirror 来获取所有字段并更改为新值, 我可以得到所有类别为 name 和 value
的孩子let m = Mirror(reflecting: self)
for item in m.children {
print("\(item.name) \(item.value)")
}
但不能作为变量的更改值:
let m = Mirror(reflecting: self)
for item in m.children {
item.value = "new Value"
}
并给出一个错误,因为字段是不可变的:
无法分配给属性:“ item”是一个“ let”常量
是否可以通过 Mirror 是Swift来更改值?
Java通过 Reflection
可以胜任这项工作我在循环中使用var
,可以更改值,但值的字段在类中未更改。
let m = Mirror(reflecting: self)
for var item in m.children {
item.value = "new Value"
}
答案 0 :(得分:1)
我找到了解决方案。我认为这对您有帮助
func toJSON() throws -> Any? {
let mirror = Mirror(reflecting: self)
guard !mirror.children.isEmpty else { return self }
var result: [String: Any] = [:]
for child in mirror.children {
if let value = child.value as? JSONSerializable {
if let key = child.label {
result[key] = try value.toJSON()
} else {
throw CouldNotSerializeError.undefinedKey(source: self, type: String(describing: type(of: child.value)))
}
} else {
throw CouldNotSerializeError.noImplementation(source: self, type: String(describing: type(of: child.value)))
}
}
return result
}
答案 1 :(得分:0)
这似乎是一个解决方案,尽管我尚未使用它:Swift Runtime Library