是否可以对 swift 可选数组进行编码?
Is encoding swift array of optionals possible?
我希望能够使用一组可选值对 class 进行编码。 Xcode 错误“无法使用类型为‘([SKSpriteNode?], for key: String') 的参数列表调用 'encode object'。
class MyCustomNode: SKNode {
var possibleSprites:[SKSpriteNode?] = [nil, nil, nil, nil, nil, nil, nil]
...
}
override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.possibleSprites, forKey: "POSSIBLESPRITES")
super.encodeWithCoder(aCoder)
}
这可以实现吗?如果没有,还有什么其他选择?
关于正确解码的问题...
加上以下,
let x:[AnyObject!] = aDecoder.decodeObjectForKey("POSSIBLESPRITES") as! [AnyObject]
self.possibleSprites = x.map { [=12=] == NSNull() ? nil : [=12=] }
我收到 Xcode 错误:“无法使用类型为 '((_) -> _)' 的参数列表调用 'map'”
我认为它与 return 类型有关,但不确定如何解决...
使用 Objective-C 你也不能编码一个 nil 指针。您需要将 self.possibleSprites
映射到 AnyObject?
的数组并使用 NSNull
代替 nil。
let x : [AnyObject!] = self.possibleSprites.map { [=10=] == nil ? NSNull() : [=10=] }
aCoder.encodeObject(x, forKey: "POSSIBLESPRITES")
记得在回来的路上正确解码。
我希望能够使用一组可选值对 class 进行编码。 Xcode 错误“无法使用类型为‘([SKSpriteNode?], for key: String') 的参数列表调用 'encode object'。
class MyCustomNode: SKNode {
var possibleSprites:[SKSpriteNode?] = [nil, nil, nil, nil, nil, nil, nil]
...
}
override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.possibleSprites, forKey: "POSSIBLESPRITES")
super.encodeWithCoder(aCoder)
}
这可以实现吗?如果没有,还有什么其他选择?
关于正确解码的问题...
加上以下,
let x:[AnyObject!] = aDecoder.decodeObjectForKey("POSSIBLESPRITES") as! [AnyObject]
self.possibleSprites = x.map { [=12=] == NSNull() ? nil : [=12=] }
我收到 Xcode 错误:“无法使用类型为 '((_) -> _)' 的参数列表调用 'map'”
我认为它与 return 类型有关,但不确定如何解决...
使用 Objective-C 你也不能编码一个 nil 指针。您需要将 self.possibleSprites
映射到 AnyObject?
的数组并使用 NSNull
代替 nil。
let x : [AnyObject!] = self.possibleSprites.map { [=10=] == nil ? NSNull() : [=10=] }
aCoder.encodeObject(x, forKey: "POSSIBLESPRITES")
记得在回来的路上正确解码。