我如何在 Swift 3 中使用 NSCoder 为歌曲编码 PersistentID
How do i encode a PersistentID for a song using NSCoder in Swift 3
这是我第一次使用 NSCoder,曾经有一个名为 encodeInteger 的方法,但它似乎在 Swift3 中消失了,文档似乎也没有帮助。
可能混淆的地方在于Int和UInt64的区别。它们是一样的吗?
我应该使用 NSKeyedArchiver 吗?如果是的话,它如何工作以符合 NSCoding?
这是之前的错误:
在没有错误之后:
为什么不使用 NSNumber 并将其编码为对象?它看起来像这样:
let bigNumber: UInt64 = /* 123 */
let number = NSNumber(value: bigNumber)
// Encoding it just like a String
coder.encode(number, forKey: "BigNumberKey")
// Decoding and using the property uint64Value from NSNumber to get the UInt64 back
if let object = coder.decodeObject(forKey: "BigNumberKey") as? NSNumber {
let decodedBigNumber = object.uint64Value
}
如果这是出于某种原因的要求,NSCoder 支持 encoding of Int64 (and you could cast it, described here).
从 encodeInteger
到 encode
的变化是 SE-0005 的一部分(影响了很多不同的 类;UIColor.blueColor()
现在是 UIColor.blue()
,例如)。
这是我第一次使用 NSCoder,曾经有一个名为 encodeInteger 的方法,但它似乎在 Swift3 中消失了,文档似乎也没有帮助。
可能混淆的地方在于Int和UInt64的区别。它们是一样的吗?
我应该使用 NSKeyedArchiver 吗?如果是的话,它如何工作以符合 NSCoding?
这是之前的错误:
为什么不使用 NSNumber 并将其编码为对象?它看起来像这样:
let bigNumber: UInt64 = /* 123 */
let number = NSNumber(value: bigNumber)
// Encoding it just like a String
coder.encode(number, forKey: "BigNumberKey")
// Decoding and using the property uint64Value from NSNumber to get the UInt64 back
if let object = coder.decodeObject(forKey: "BigNumberKey") as? NSNumber {
let decodedBigNumber = object.uint64Value
}
如果这是出于某种原因的要求,NSCoder 支持 encoding of Int64 (and you could cast it, described here).
从 encodeInteger
到 encode
的变化是 SE-0005 的一部分(影响了很多不同的 类;UIColor.blueColor()
现在是 UIColor.blue()
,例如)。