1

我现在正在尝试将 `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. 可能镜像功能有问题。有什么解决办法吗?

4

0 回答 0