在Swift中保存UserDefaults的游戏分数排名的最佳方法

时间:2018-04-23 03:53:18

标签: ios swift nsuserdefaults

我经常制作游戏应用程序来保存游戏分数,并显示如下所示的排名。 (它从不使用任何服务器。用户可以在app中查看自己的游戏分数。) 等级评分 第1级99 9999 第二级87 8875 第3级87 8875 4级64 6938 5级3 320 ... 当我实现这样的排名时,我总是使用如下所示的多维数组。 rankArray 等级分数 [0] [0] // 1 [1] [1] //第二名 [2] [2] //第3名 // [0] = 99,9999 // [1] = 87,8875 但如果您知道更好的排名方式,请告诉我。

3 个答案:

答案 0 :(得分:5)

尝试使用CoreData存储用户分数。

使用Scorelevel作为属性创建scoreValue对象。

这样一来,数据就会持久化,并且可以通过多种方式轻松地进行排序和过滤。

您可以保存所有分数并获取最高分数,或管理要保存的分数并始终全部获取。

获取最高分后,请按scoreValues降序排序,按排名对其进行排序。

CoreData是一个非常强大的免费赠品

答案 1 :(得分:0)

我建议你使用链接链表,这是最合适的数据结构。 它允许您在任何位置快速插入元素。

答案 2 :(得分:-1)

如果您想使用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]]