在 swift 中使节点可编码

Make a node Codable in swift

我想使用一个简单的 FileManager 来持久化对象,这需要 Codable 才能工作。问题是我试图保留的对象包含一个 SCNNode,这需要我以某种方式使 SCNNode 可编码。

我尝试使用如下代码实现它 Codable

class CodebleNode: Codable {

    var name: String?
    var Xposition: Float
    var Yposition: Float
    var Zposition: Float
    
    static func createCodableNode(from node: SCNNode) -> CodableNode {
        let codableNode = CodableNode(name: node.name, xposition: node.position.x, yposition: node.position.y, zPosition: node.position.z)
        return codableNode
    }
    
    init(name: String?, xposition: Float, yposition: Float, zPosition: Float){
        self.name = name
        Xposition = xposition
        Yposition = yposition
        Zposition = zPosition
    }
}

但是实现类似的包装器来支持 every SCNGeometry.

会很乏味

CoreData 可以解决这个问题吗?或者是否有任何简单的代码可以做到这一点?

SceneKit 早于 Swift 的 4 的 Codable API,并且从未被增强以支持它。相反,它支持 Objective-C 的 NSCoding API(NSSecureCoding,确切地说)。

实际上可以利用 NSCodableSCNNode 实现将其包装到 Codable 存档中。本质上,您只是使用 NSArchiver 将对象包装成 Data,然后 Data 可以用 Codable 编码。可以将这一切整齐地塞进一个 属性 包装器中,我在这里演示: