从Swift 3中的本地文件加载数据对象

vei*_*rne 4 ios swift swift3

我很难在Swift 3中加载一个图像文件.这是代码:

do {
    let imageData = try Data(contentsOf: imageUrl2.asURL()) 
} catch { 
    print ("loading image file error") 
}
Run Code Online (Sandbox Code Playgroud)

当前的Url字符串是:

file:///Users/veikoherne/Library/Developer/CoreSimulator/Devices/889A08D5-B8CC-458C-99FF-643A4BA1A806/data/Containers/Data/Application/F64ED326-7894-4EE7-AA3B-B1BB10DF8259/Documents/img2017-03-23 17:39:24.jpg
Run Code Online (Sandbox Code Playgroud)

显然我已经检查过这个文件是否存在并且是有效的图像.它总是告诉我"加载图像文件错误".任何人都有在Swift 3中加载本地数据的经验?

提到的答案是使用NSData对象,可能还有Swift 2.当前Swift 3拒绝将NSData桥接到Data,这就是我必须使用Data的原因.

Saf*_*ive 11

斯威夫特 5 版本。

func loadFileFromLocalPath(_ localFilePath: String) ->Data? {
   return try? Data(contentsOf: URL(fileURLWithPath: localFilePath))
}
Run Code Online (Sandbox Code Playgroud)


Dha*_*ura 9

从本地文件加载数据您应该使用"contentsOfFile:"方法.

参考链接:https://www.hackingwithswift.com/example-code/strings/how-to-load-a-string-from-a-file-in-your-bundle

因此,在读取数据的情况下,您可以使用:

Data(contentsOf: <URL>, options: <Data.ReadingOptions>)
Run Code Online (Sandbox Code Playgroud)

将纯文本作为String读取,请使用:

String(contentsOfFile: <LocalFileDirPath>)
Run Code Online (Sandbox Code Playgroud)

从文档目录中读取图像,使用:

UIImage(contentsOfFile: <LocalFileDirPath>)
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助!


Lex*_*exi 7

我在尝试检索刚刚下载的文件时遇到了同样的问题.如果你像我一样从某个网址保存了一个文件,这应该有效:

let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
let localUrl = documentDirectory.appendingPathComponent("somefile.txt")

if FileManager.default.fileExists(atPath: localUrl.path){
    if let cert = NSData(contentsOfFile: localUrl.path) {
        return cert as Data
    }
}
Run Code Online (Sandbox Code Playgroud)