Ios 在Swift中通过用户默认值保存游戏分数排名的最佳方法
我经常制作游戏应用程序来保存游戏分数并显示它们的排名,如下所示。它从不使用任何服务器。用户可以在应用程序中查看自己的游戏分数Ios 在Swift中通过用户默认值保存游戏分数排名的最佳方法,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我经常制作游戏应用程序来保存游戏分数并显示它们的排名,如下所示。它从不使用任何服务器。用户可以在应用程序中查看自己的游戏分数 rank level score 1st level 99 9999 2nd level 87 8875 3rd level 87 8875 4th level 64 6938 5th level 3 320 ... 当我实现这样的排名时,我总是使用多维数组,如下所示 rankArray level score [0] [0] //1st [
rank level score
1st level 99 9999
2nd level 87 8875
3rd level 87 8875
4th level 64 6938
5th level 3 320
...
当我实现这样的排名时,我总是使用多维数组,如下所示
rankArray
level score
[0] [0] //1st
[1] [1] //2nd
[2] [2] //3rd
//[0] = 99, 9999
//[1] = 87, 8875
但是如果你知道保存排名的更好方法,请告诉我。我建议你使用链表,这是最合适的数据结构。
它允许您在元素的任何位置快速插入元素 我建议您使用链表,这是最合适的数据结构。
它允许您在元素的任何位置快速插入元素 尝试使用CoreData存储用户分数 创建一个属性为level和scoreValue的Score对象 通过这种方式,数据可以持久化,并且可以通过多种方式轻松排序和过滤 您可以保存所有分数并获取排名靠前的分数,或者管理要保存的分数并始终获取所有分数 获取最高分后,将分数值降序,按排名对其进行排序
是一款功能强大的免费赠品尝试使用CoreData存储用户分数 创建一个属性为level和scoreValue的Score对象 通过这种方式,数据可以持久化,并且可以通过多种方式轻松排序和过滤 您可以保存所有分数并获取排名靠前的分数,或者管理要保存的分数并始终获取所有分数 获取最高分后,将分数值降序,按排名对其进行排序
是一款功能强大的免费赠品如果您想使用UserDefaults,可以按如下方式进行:
var rank = [Int:[String:Int]]()
rank[1] = ["level" : 1,
"score" : 99]
rank[2] = ["level" : 30,
"score" : 89]
let gameData = NSKeyedArchiver.archivedData(withRootObject: rank)
UserDefaults.standard .set(gameData, forKey: "score")
let dataFromUserDefaults = UserDefaults.standard .value(forKey: "score")
let retrievedData = NSKeyedUnarchiver.unarchiveObject(with: dataFromUserDefaults as! Data) as? [Int:[String:Int]]
如果要使用UserDefaults执行此操作,可以按以下方式执行:
var rank = [Int:[String:Int]]()
rank[1] = ["level" : 1,
"score" : 99]
rank[2] = ["level" : 30,
"score" : 89]
let gameData = NSKeyedArchiver.archivedData(withRootObject: rank)
UserDefaults.standard .set(gameData, forKey: "score")
let dataFromUserDefaults = UserDefaults.standard .value(forKey: "score")
let retrievedData = NSKeyedUnarchiver.unarchiveObject(with: dataFromUserDefaults as! Data) as? [Int:[String:Int]]
排名不应该在运行时计算,因为它取决于其他用户的分数吗?@TheTiger,事实上,你这样说让我意识到排名根本不应该是一个存储属性。当你拿到高分时,你会把他们从高到低排序,这就是对他们的排名。感谢您提到这一点,我将更新我的答案:@TheTiger,并根据更新回答您的问题,只有在获取分数时才会计算排名。不应该在运行时计算排名,因为这取决于其他用户的分数吗?@TheTiger,实际上,你这么说让我意识到等级根本不应该是一种存储属性。当你拿到高分时,你会把他们从高到低排序,这就是对他们的排名。感谢您提到这一点,我将更新我的答案:@TheTiger,并根据更新回答您的问题,只有在获取分数时才会计算排名。