将[NSURL]转换为NSUserDefaults的[String]?

时间:2015-12-07 23:32:18

标签: swift casting nsuserdefaults transitions

我将图像保存为Parse Data作为NSURL的数组。一旦我将它们带回我的应用程序,我想将它们转换为[String],以便我的应用程序可以暂时存储它们。有什么想法吗?

这是我的代码......

//像这样保存....

vc.videoImageArry = defaults.setObjectForKey("vidImages)

//像这样检索......

vc.vidImageArray = defaults.objectForKey("vidImages") as! [NSURL]

2 个答案:

答案 0 :(得分:2)

使用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) }
}

正如下面的评论中所讨论的,如果使用NSUserDefaults函数将数据写入save ,我们知道数组的每个元素都是{{1代表有效的String

因此,我们可以使用NSURL的替代版本将load的返回类型从[NSURL?]?更改为[NSURL]?

load

答案 1 :(得分:0)

要从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($0) }
let backToUrls = strings.map { NSURL(string: $0)! }

我相信以上内容可以回答您的具体问题。

话虽如此,保存线并不适合我。如果您对该行有困难,您可能需要进一步查看NSUserDefaults或提出单独的问题。您需要粘贴更多上下文,例如上下行,以及您收到的确切错误消息。