提问人:davidmark 提问时间:12/1/2022 更新时间:12/1/2022 访问量:218
有人可以解释如何在 Swift 中使用 NSKeyedArchiver 和 NSKeyedUnarchiver 吗?
Can someone explain how to use NSKeyedArchiver and NSKeyedUnarchiver in Swift?
问:
我在 Swift 中理解 NSKeyedArchiver 和 NSKeyedUnarchiver 时遇到了麻烦。
这是我得到的一些示例代码,用于了解其使用:
class Workout : NSObject, Coding {
var name: String!
var entries: Int = 0
required convenience init(coder aDecoder: NSCoder) {
self.init()
name = aDecoder.decodeObject(forKey: "name") as! String
entries = aDecoder.decodeInteger(forKey: "entries")
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encode(self.name, forKey: "name")
aCoder.encode(self.entries, forKey: "entries")
}
}
let libDir = FileManager.default.urls(for: .libraryDirectory,
in: .userDomainMask)[0]
print(libDir)
let workout = Workout()
workout.entries = 14
workout.name = "Pull-ups"
let path = libDir.appendingPathComponent("workouts")
// Serialisere til disk
if let data = try? NSKeyedArchiver.archivedData(withRootObject: workout, requiringSecureCoding: true) {
try? data.write(to: path)
}
// Deserialisere fra disk
if let archivedData = try? Data(contentsOf: path),
let savedWorkout = (try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(archivedData)) as? Workout {
print("\(savedWorkout.name), entries: \(savedWorkout.entries)")
}
我以某种方式了解 NSKeyedArchiver 的工作原理,但 NSKeyedUnarchiver 中的 Workout 类是我发现难以理解的东西。课堂上发生了什么?当我尝试将类粘贴到新的 swift 文件中时,出现此错误:“在范围内找不到类型'编码'”。
答: 暂无答案
评论
Coding
NSCoding
Codable
try?
do
catch
try?