3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
這個(gè)問題的意思是“數(shù)組數(shù)組”,但我認(rèn)為大多數(shù)人可能只是想知道如何將數(shù)組保存到UserDefaults。對(duì)于那些人,我將添加一些常見示例。
字符串?dāng)?shù)組
保存數(shù)組
let array = ["horse", "cow", "camel", "sheep", "goat"]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedStringArray")
檢索數(shù)組
let defaults = UserDefaults.standard
let myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()
整數(shù)數(shù)組
保存數(shù)組
let array = [15, 33, 36, 723, 77, 4]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedIntArray")
檢索數(shù)組
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedIntArray") as? [Int] ?? [Int]()
布爾數(shù)組
保存數(shù)組
let array = [true, true, false, true, false]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedBoolArray")
檢索數(shù)組
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedBoolArray") as? [Bool] ?? [Bool]()
日期數(shù)組
保存數(shù)組
let array = [Date(), Date(), Date(), Date()]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedDateArray")
檢索數(shù)組
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedDateArray") as? [Date] ?? [Date]()
對(duì)象數(shù)組
自定義對(duì)象(以及對(duì)象的數(shù)組)需要做更多的工作才能保存到UserDefaults。請(qǐng)參閱以下鏈接以了解操作方法。
將自定義對(duì)象保存到NSUserDefaults中
用于將顏色保存為UserDefaults的文檔
嘗試將非屬性列表對(duì)象設(shè)置為NSUserDefaults
筆記
使用nil合并運(yùn)算符(??),您可以返回保存的數(shù)組或空數(shù)組而不會(huì)崩潰。這意味著如果對(duì)象返回nil,則將??使用運(yùn)算符后的值代替。
正如你所看到的,基本設(shè)置是為同一個(gè)Int,Bool和Date。我也用進(jìn)行了測試Double。據(jù)我所知,您可以保存在屬性列表中的所有內(nèi)容都將像這樣工作。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
只是添加到@Zaph在評(píng)論中所說的內(nèi)容。
我知道您遇到的問題與您相同,String無法保存的數(shù)組。即使Apple橋接了String和NSString之類的類型,我也無法保存[String]兩個(gè)都不包含的數(shù)組[AnyObject]。
但是[NSString]為我準(zhǔn)備了一系列作品。
因此您的代碼可能如下所示:
var key = "keySave"
var array1: [NSString] = [NSString]()
array1.append("value 1")
array1.append("value 2")
//save
var defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(array1, forKey: key)
defaults.synchronize()
//read
if let testArray : AnyObject? = defaults.objectForKey(key) {
var readArray : [NSString] = testArray! as [NSString]
}
請(qǐng)注意,我創(chuàng)建了一個(gè)NSString數(shù)組,而不是一個(gè)字典。我沒有檢查它是否適用于字典,但是可能您必須定義一些東西[NSString : NSString]才能使其工作。
編輯
重新閱讀您的問題和標(biāo)題,您正在談?wù)揳rray of array。我認(rèn)為,只要您繼續(xù)使用NSString,數(shù)組數(shù)組就可以工作。但是,如果您認(rèn)為我的答案無關(guān)緊要,請(qǐng)?jiān)谠u(píng)論中讓我知道,然后我將其刪除。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
這是一個(gè)讀寫SNStock實(shí)現(xiàn)類型的對(duì)象列表的示例NSCoding-我們有一個(gè)用于整個(gè)列表的訪問器watchlist,以及兩個(gè)添加和刪除對(duì)象的方法,即addStock(stock: SNStock)和removeStock(stock: SNStock)。
import Foundation
class DWWatchlistController {
private let kNSUserDefaultsWatchlistKey: String = "dw_watchlist_key"
private let userDefaults: NSUserDefaults
private(set) var watchlist:[SNStock] {
get {
if let watchlistData : AnyObject = userDefaults.objectForKey(kNSUserDefaultsWatchlistKey) {
if let watchlist : AnyObject = NSKeyedUnarchiver.unarchiveObjectWithData(watchlistData as! NSData) {
return watchlist as! [SNStock]
}
}
return []
}
set(watchlist) {
let watchlistData = NSKeyedArchiver.archivedDataWithRootObject(watchlist)
userDefaults.setObject(watchlistData, forKey: kNSUserDefaultsWatchlistKey)
userDefaults.synchronize()
}
}
init() {
userDefaults = NSUserDefaults.standardUserDefaults()
}
func addStock(stock: SNStock) {
var watchlist = self.watchlist
watchlist.append(stock)
self.watchlist = watchlist
}
func removeStock(stock: SNStock) {
var watchlist = self.watchlist
if let index = find(watchlist, stock) {
watchlist.removeAtIndex(index)
self.watchlist = watchlist
}
}
}
請(qǐng)記住,您的對(duì)象需要實(shí)現(xiàn)NSCoding,否則編碼將無法正常工作。這里是什么SNStock樣子:
import Foundation
class SNStock: NSObject, NSCoding
{
let ticker: NSString
let name: NSString
init(ticker: NSString, name: NSString)
{
self.ticker = ticker
self.name = name
}
//MARK: NSCoding
required init(coder aDecoder: NSCoder) {
self.ticker = aDecoder.decodeObjectForKey("ticker") as! NSString
self.name = aDecoder.decodeObjectForKey("name") as! NSString
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(ticker, forKey: "ticker")
aCoder.encodeObject(name, forKey: "name")
}
//MARK: NSObjectProtocol
override func isEqual(object: AnyObject?) -> Bool {
if let object = object as? SNStock {
return self.ticker == object.ticker &&
self.name == object.name
} else {
return false
}
}
override var hash: Int {
return ticker.hashValue
}
}
希望這可以幫助!
- 3 回答
- 0 關(guān)注
- 1050 瀏覽
添加回答
舉報(bào)