如何使用 Swift 在基于 UIKit 的游戏中 save/load 游戏状态
how to save/load game state in UIKit based Game using Swift
我正在 Swift 使用 UIKit 开发游戏。我想 save/load 每次关闭和打开游戏时的变化。需要 saved/loaded 的数据是 class 包含 String 和 Int 的数据。
样本class:
class UserData {
var username: String = String()
var gamepoints: String = String()
var items: [UserItem] = []
}
class UserItem {
var name: String = String()
var quantity: Int = 0
var price: Int = 0
}
我只需要保存与上面类似的class。我应该使用什么方法?当游戏关闭并再次打开时,如何检索 UserData class 实例的更新值?有没有一种方法可以将这个 class 值保存到某个地方并在重新启动应用程序后初始化它们?
答案是肯定的。您将要查看 NSCoding
和 NSKeyedArchiver
。基本上您需要执行以下步骤:
- 让您的
UserData
和 UserItem
类 实施 NSCoding
协议。
- 需要时将它们写入磁盘
NSKeyedArchiver
- 需要时从磁盘读取它们
NSKeyedUnarchiver
查看这篇文章:http://nshipster.com/nscoding/
但是您还有许多其他存储用户数据的选项 - 您也可以使用 NSUserDefaults
、CoreData、SQLite 等存储用户数据。您的问题确实很广泛,并且不知道您游戏的具体细节:它需要多久 read/output 这些数据,它有多少,你使用什么数据结构来收集它......很难给你一个明确的正确答案。
我正在 Swift 使用 UIKit 开发游戏。我想 save/load 每次关闭和打开游戏时的变化。需要 saved/loaded 的数据是 class 包含 String 和 Int 的数据。
样本class:
class UserData {
var username: String = String()
var gamepoints: String = String()
var items: [UserItem] = []
}
class UserItem {
var name: String = String()
var quantity: Int = 0
var price: Int = 0
}
我只需要保存与上面类似的class。我应该使用什么方法?当游戏关闭并再次打开时,如何检索 UserData class 实例的更新值?有没有一种方法可以将这个 class 值保存到某个地方并在重新启动应用程序后初始化它们?
答案是肯定的。您将要查看 NSCoding
和 NSKeyedArchiver
。基本上您需要执行以下步骤:
- 让您的
UserData
和UserItem
类 实施NSCoding
协议。 - 需要时将它们写入磁盘
NSKeyedArchiver
- 需要时从磁盘读取它们
NSKeyedUnarchiver
查看这篇文章:http://nshipster.com/nscoding/
但是您还有许多其他存储用户数据的选项 - 您也可以使用 NSUserDefaults
、CoreData、SQLite 等存储用户数据。您的问题确实很广泛,并且不知道您游戏的具体细节:它需要多久 read/output 这些数据,它有多少,你使用什么数据结构来收集它......很难给你一个明确的正确答案。