将 [NSURL] 转换为 NSUserDefaults 的 [String]?
Converting [NSURL] into [String] for NSUserDefaults?
我正在将图像作为 NSURL 数组保存到 Parse Data 中。一旦我将它们放回我的应用程序中,我想将它们转换为 [String] 以便我的应用程序可以临时存储它们。有什么想法吗?
这是我的代码....
// 像这样保存....
vc.videoImageArry = defaults.setObjectForKey("vidImages)
//像这样检索....
vc.vidImageArray = defaults.objectForKey("vidImages") as! [NSURL]
使用 NSData
您可以将每个 NSURL
转换为 NSData
以保存它
func save(urls: [NSURL]) {
let urlsData = urls.map { [=10=].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: [=11=], relativeToURL: nil) }
}
使用字符串
或者您可以将网址另存为 String(s)
func save(urls: [NSURL]) {
let urlsData = urls.map { [=12=].absoluteString }
NSUserDefaults.standardUserDefaults().setObject(urlsData, forKey: "urlsData")
}
func load() -> [NSURL?]? {
let retrievedData = NSUserDefaults.standardUserDefaults().arrayForKey("urlsData") as? [String]
return retrievedData?.map { NSURL(string: [=12=]) }
}
正如下面评论中所讨论的,如果数据写入 NSUserDefaults
独占 使用 save
函数,我们知道数组的每个元素是代表有效 NSURL
.
的 String
因此我们可以使用 load
的替代版本将 load
的 return 类型从 [NSURL?]?
更改为 [NSURL]?
。
func load() -> [NSURL]? {
let retrievedData = NSUserDefaults.standardUserDefaults().arrayForKey("urlsData") as? [String]
return retrievedData?.flatMap { NSURL(string: [=13=]) }
}
要从 NSURL
转换为 String
:
String(url)
要从 String
转换为 NSURL
:
NSURL(string: string)
这是一个可以双向转换数组的完整示例:
import Cocoa
let urls = [NSURL(string: "http://www.swift.org/")!, NSURL(string: "http://www.apple.com/")!]
let strings = urls.map { String([=12=]) }
let backToUrls = strings.map { NSURL(string: [=12=])! }
我相信以上内容可以回答您的具体问题。
话虽如此,我觉得保存行不对。您可能想进一步研究 NSUserDefaults
或在遇到该行问题时提出单独的问题。您需要粘贴更多上下文,例如上面和下面的行以及您收到的确切错误消息(如果有)。
我正在将图像作为 NSURL 数组保存到 Parse Data 中。一旦我将它们放回我的应用程序中,我想将它们转换为 [String] 以便我的应用程序可以临时存储它们。有什么想法吗?
这是我的代码....
// 像这样保存....
vc.videoImageArry = defaults.setObjectForKey("vidImages)
//像这样检索....
vc.vidImageArray = defaults.objectForKey("vidImages") as! [NSURL]
使用 NSData
您可以将每个 NSURL
转换为 NSData
以保存它
func save(urls: [NSURL]) {
let urlsData = urls.map { [=10=].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: [=11=], relativeToURL: nil) }
}
使用字符串
或者您可以将网址另存为 String(s)
func save(urls: [NSURL]) {
let urlsData = urls.map { [=12=].absoluteString }
NSUserDefaults.standardUserDefaults().setObject(urlsData, forKey: "urlsData")
}
func load() -> [NSURL?]? {
let retrievedData = NSUserDefaults.standardUserDefaults().arrayForKey("urlsData") as? [String]
return retrievedData?.map { NSURL(string: [=12=]) }
}
正如下面评论中所讨论的,如果数据写入 NSUserDefaults
独占 使用 save
函数,我们知道数组的每个元素是代表有效 NSURL
.
String
因此我们可以使用 load
的替代版本将 load
的 return 类型从 [NSURL?]?
更改为 [NSURL]?
。
func load() -> [NSURL]? {
let retrievedData = NSUserDefaults.standardUserDefaults().arrayForKey("urlsData") as? [String]
return retrievedData?.flatMap { NSURL(string: [=13=]) }
}
要从 NSURL
转换为 String
:
String(url)
要从 String
转换为 NSURL
:
NSURL(string: string)
这是一个可以双向转换数组的完整示例:
import Cocoa
let urls = [NSURL(string: "http://www.swift.org/")!, NSURL(string: "http://www.apple.com/")!]
let strings = urls.map { String([=12=]) }
let backToUrls = strings.map { NSURL(string: [=12=])! }
我相信以上内容可以回答您的具体问题。
话虽如此,我觉得保存行不对。您可能想进一步研究 NSUserDefaults
或在遇到该行问题时提出单独的问题。您需要粘贴更多上下文,例如上面和下面的行以及您收到的确切错误消息(如果有)。