使用 NSData
您可以将每个NSURL 转换为NSData 以保存它
func save(urls: [NSURL]) {
let urlsData = urls.map { $0.dataRepresentation }
NSUserDefaults.standardUserDefaults().setObject(urlsData, forKey: "urlsData")
}
稍后您可以检索NSData 数组并将其转换回[NSURL]
func load() -> [NSURL]? {
let retrievedData = NSUserDefaults.standardUserDefaults().arrayForKey("urlsData") as? [NSData]
return retrievedData?.map { NSURL(dataRepresentation: $0, relativeToURL: nil) }
}
使用字符串
或者,您可以将网址保存为String(s)
func save(urls: [NSURL]) {
let urlsData = urls.map { $0.absoluteString }
NSUserDefaults.standardUserDefaults().setObject(urlsData, forKey: "urlsData")
}
func load() -> [NSURL?]? {
let retrievedData = NSUserDefaults.standardUserDefaults().arrayForKey("urlsData") as? [String]
return retrievedData?.map { NSURL(string: $0) }
}
正如下面的 cmets 中所讨论的,如果使用 save 函数仅将数据写入 NSUserDefaults,我们知道数组的每个元素都是一个 String,代表一个有效的 @ 987654332@.
因此我们可以使用load 的替代版本将load 的返回类型从[NSURL?]? 更改为[NSURL]?。
func load() -> [NSURL]? {
let retrievedData = NSUserDefaults.standardUserDefaults().arrayForKey("urlsData") as? [String]
return retrievedData?.flatMap { NSURL(string: $0) }
}