2015-11-20 32 views
0

我有一個NSUserDefault字典。其中一個鍵值爲[Int]。我正在考慮如何將Ints附加到該嵌入式陣列。SWIFT - 在NSUser默認字典中追加Int數組

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

什麼我目前做的是保存字典給一個變量,創建本新詞典可變的變量數組,然後附加這一點。然後我用新數組更新字典並將該字典保存爲默認值。

有沒有人知道直接的方式來追加到數組而不必做所有的中間工作?

+0

fasik,我不認爲你可以。你只能設置和獲取nsuserdefaults的東西 –

回答

0

你可以這樣說:

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

您只能從NSUserDefaults讀取和寫入對象。如果你使用它經常寫一些方法e.g:

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

您可以創建一個計算的屬性和定義的getter/setter自動保存到用戶的默認值。您將需要從[字符串:[INT]]轉換爲[字符串: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] 
+0

它不是在playGround上工作,但它在真正的項目中工作。爲什麼? –

+0

好的謝謝你的信息.. :) –

+0

http://stackoverflow.com/a/26723557/2303865 –