SWIFT - 将 Int 附加到 NSUser 默认字典中的数组

SWIFT - Append Int to array in NSUser Default Dictionary

我有一本 NSUserDefault 字典。其中一个键的值类型为 [Int]。我想弄清楚如何将 Ints 附加到该嵌入式数组。

var dictionary = ["keyOne" : [1,2,3,4,5]]
defaults.setObject(dictionary, forKey: "defaultDictionary")

我目前正在做的是将字典保存到一个变量,从新的字典变量创建一个变量数组,然后附加它。然后我用新数组更新字典并将该字典保存回默认值。

有没有人知道无需完成所有中间工作即可直接附加到数组的方法?

您只能从 NSUserDefaults 读取和写入对象。如果你经常使用它,写一些方法例如:

func updateDefaultsWithArray(array: [Int]) {
    let dictionary = ["keyOne" : array]
    let defaults = NSUserDefaults()
    defaults.setObject(dictionary, forKey: "defaultDictionary")
}

你可以这样做:

func saveArray(valueArray: [AnyObject], key: String) {
    let dataToSave = NSKeyedArchiver.archivedDataWithRootObject(valueArray)
    NSUserDefaults.standardUserDefaults().setObject(dataToSave, forKey: key)
}

您可以创建计算 属性 并定义 getter/setter 以将其自动保存为用户默认值。您需要从 [String:[Int]] 转换为 [String:AnyObject] 才能将其保存到 NSUSerDefaults:

var defaultDictionary:[String:[Int]] {
    get {
        return NSUserDefaults().dictionaryForKey("defaultDictionary") as? [String:[Int]] ??  [:]
    }
    set {
        NSUserDefaults().setObject(newValue as [String:AnyObject], forKey: "defaultDictionary")
    }
}


print(defaultDictionary["keyOne"]?.description ?? "")  // [1, 2, 3, 4, 5]
print(defaultDictionary["keyTwo"]?.description ?? "")  // [1, 2, 3]

defaultDictionary["keyOne"]?.append(6)
defaultDictionary["keyTwo"]?.append(4)

print(defaultDictionary["keyOne"]?.description ?? "")  // [1, 2, 3, 4, 5, 6]
print(defaultDictionary["keyTwo"]?.description ?? "")  // [1, 2, 3, 4]