我設定的 Set 遊戲模式目前只有一種:從牌面上找到 10 組 Set。排行榜的部分則是記錄玩家所花費的時間,花越少時間者排名越高。
使用 UserDefaults 儲存資料
UserDefaults 可以用來存少量的資料,會一直存在本地直到刪除 App。
UserDefaults 可以存的資料有 String, Number, Date, Data, Dictionary, URL,也可以存成 Array 的格式,不過型別也要是上述幾種。若想要存自定義型別,需先經過 JSONEncode 成 Data 的型別。
不過目前遊戲需要的排行榜資料很單純,沒有使用者名稱,僅存秒數成績。
let userDefaults = UserDefaults.standardvar records: [Int] = userDefaults.object(forKey: "findTenRecords") as? [Int] ?? []
UserDefaults 是利用 Key-Value 儲存資料。上述程式碼先從 UserDefaults 中取得 findTenRecords 的資料
// 加入後,sort 由小到大
records.append(result)
records.sort { $0 < $1 }
if records.count > 10 {
records = records.dropLast()
}
把新的秒數 append 到陣列中,並且由秒數小排到大。由於預計只存1~10 名的資料,所以陣列若超過十個元素則拿掉最後一個
userDefaults.set(records, forKey: "findTenRecords")
最後再寫入 UserDefaults 的 findTenRecords key 中,即可記錄之
Demo
其實找十組 Set 應該要花蠻久的,為了 Demo 需求,我先改成找到一組就成功~