【iOS】#27 Set(神奇形色牌) Part2: 儲存排行榜

使用 UserDefaults 儲存名次資料

Leo Kuo
Mar 6, 2021

我設定的 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 需求,我先改成找到一組就成功~

--

--

Leo Kuo

Indie Game Developer | Frontend Developer | iOS Developer | UIUX