簡體   English   中英

如何快速存儲元組數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM