【问题标题】:SWIFT - Append Int to array in NSUser Default DictionarySWIFT - 将 Int 附加到 NSUser 默认字典中的数组
【发布时间】:2016-02-23 09:04:57
【问题描述】:

我有一本NSUserDefault 字典。其中一个键具有[Int] 类型的值。我正在寻找如何将Ints 附加到该嵌入式数组。

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

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

有没有人知道直接追加到数组而不必做所有中间工作的方法?

【问题讨论】:

  • fasik,我不认为你可以。你只能从 nsuserdefaults 设置和获取东西

标签: arrays swift dictionary append nsuserdefaults


【解决方案1】:

您可以创建一个计算属性并定义 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]

【讨论】:

  • 它在 playGround 上不工作,但在实际项目中工作.. 为什么?
【解决方案2】:

你可以这样做:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-30
      • 2016-06-11
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 2019-08-17
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多