I'd like to use a simple FileManager
to persist an object, which requires Codable
to work. The issue is that the object I'm trying to persist contains an SCNNode
, which would require me to somehow mane SCNNode
codable.
I tried to make it Codable
by using code like this:
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
}
}
But it would be tedious to implement a similar wrapper to support every SCNGeometry
.
Would CoreData
solve this problem or is there any simple code to do that?
SceneKit predates Swift's 4's Codable API, and was never augmented to supported it. Instead, it supports Objective-C's NSCoding
API (NSSecureCoding
, to be exact).
It's actually possible to leverage the SCNNode
implementation of NSCodable
to wrap it into a Codable archive. Essentially you just use an NSArchiver
to wrap the object into a Data
, and that Data
can then be encoded with Codable
. It's possible to neatly tuck this all away into a property wrapper, which I demonstrate here: