我现在正在尝试将 `struct1 转换为 Realm 对象。领域对象具有与原始结构相同的键路径。因此,如果我可以从原始结构中获取所有可写键路径,则可以使用通用方法进行转换。
public protocol KeyPathListable {
var allKeyPaths:[WritableKeyPath<Self, Any>] { get }
}
extension KeyPathListable {
private subscript(checkedMirrorDescendant key: String) -> Any {
return Mirror(reflecting: self).descendant(key)!
}
var allKeyPaths:[WritableKeyPath<Self, Any>] {
var membersTokeyPaths = [WritableKeyPath<Self,Any>]()
let mirror = Mirror(reflecting: self)
for case (let key?, _) in mirror.children {
if let keyPath = \Self.[checkedMirrorDescendant: key] as? WritableKeyPath<Self, Any> {
membersTokeyPaths.append(keyPath)
}
}
return membersTokeyPaths
}
}
刚刚找到上面的代码片段,但它返回KeyPath
(不是WritableKeyPath
)。在这种情况下,我尝试进行类型转换,但它返回nil
. 可能镜像功能有问题。有什么解决办法吗?