[英]How to store arrays of tuples in swift
我正在制作一個應用程序,我必須存儲四個數組([[Double,Double)類型]和一個三重og類型(String,String,String)的數據。它們在以下類中聲明
class DataStorer {
static var losArray = [(Double, Double)]()
static var morgenArray = [(Double, Double)]()
static var middagArray = [(Double, Double)]()
static var aftenArray = [(Double, Double)]()
static var lastMeal = ("", "", "")
}
我需要在應用程序關閉時(或發生其他事情,如通話)將它們存檔,並在應用程序需要時檢索數據。 數組的最大長度為18。我該怎么做?
如果您在數組中使用的值過多,則可以將其存儲到NSUserDefaults中。 對於結構化數據,我傾向於喜歡為子值創建字典以使屬性列表美觀並易於用戶閱讀。
將元組數組保存為默認值非常容易:
let encodedValues = losArray.map{return ["0":$0.0, "1":$0.1]}
NSUserDefaults.standardUserDefaults().setObject(encodedValues, forKey:"losArray")
加載要稍微復雜一點,但這僅是考慮了屬性列表中數據可能被破壞的所有方式:
func loadValuesFromDefaults(arrayName:String) -> [(Double, Double)] {
guard let encodedArray = NSUserDefaults.standardUserDefaults().arrayForKey(arrayName) else {return []}
return encodedArray.map{$0 as? NSDictionary}.flatMap{
guard let values = $0 else {return nil}
if let xValue = values["0"] as? Double,
yValue = values["1"] as? Double {
return (xValue, yValue)
} else {
return nil
}
}
}
如果需要,可以用適合元組的標簽替換“ 0”和“ 1”標簽。 這將保存並加載一個字典數組,其中元組的值以人類可讀的格式存儲在該數組中。 這使得在開發過程中或之后輕松挖掘屬性列表以及讀取和調整值。
加載函數中的各種條件可保護您避免丟失數組,使用錯誤類型的相同名稱的數組以及該數組中的各個損壞的項。 通過屬性列表數組反序列化原始對象數據,我已經看到了令人討厭的崩潰和安全問題,因此我使用它來防止它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.