在 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
,确切地说)。
实际上可以利用 NSCodable
的 SCNNode
实现将其包装到 Codable 存档中。本质上,您只是使用 NSArchiver
将对象包装成 Data
,然后 Data
可以用 Codable
编码。可以将这一切整齐地塞进一个 属性 包装器中,我在这里演示:
我想使用一个简单的 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
,确切地说)。
实际上可以利用 NSCodable
的 SCNNode
实现将其包装到 Codable 存档中。本质上,您只是使用 NSArchiver
将对象包装成 Data
,然后 Data
可以用 Codable
编码。可以将这一切整齐地塞进一个 属性 包装器中,我在这里演示: