
150
|
第
5
章
var decodedSavedGame : SavedGame?
do {
let decoder = JSONDecoder()
decodedSavedGame = try decoder.decode(SavedGame.self, from: data)
} catch let error {
print("Failed to decode the saved game! \(error)")
}
// 'decodedSavedGame'
要么为
nil
要么包含了一个
SavedGame
对象
decodedSavedGame?.playerName // = "Grabthar"
讨论
当你将某种类型修饰成
Codable
的 ,则
Swift
编译器会自动生成它的编码
/
解码方法,
前提是该类型的所有存储属性都是
Codable
的。
在这个例子里,
SavedGame
类型所保存的数据包含了三个
Codable
的属性:一个
字符串、一个整型,它们在
Swift
标准库中被定义为
Codable
了,以及一个枚举
Achievements
,它已经被我们直接修饰为
Codable
了,因为它其实是一个字符串,
所以根本无需我们做任何多余的工作。
如果你所使用的类型不能被
Codable
(因为它的存储属性不是
Codable
的),那么
你可以手动实现编码和解码。但是,这个问题稍有点复杂,已经超出本书的范畴了,
你可以参考一下苹果公司文档的“编码和解码自定义类型”部分(
https://apple.
co/2QVqrXr ...