迅捷 4 数据读取选项



这个 Objective C 代码行到 Swift 4 的正确翻译是什么?

NSData *mappedData =
[NSData dataWithContentsOfURL:fileURL
options:NSDataReadingMappedAlways + NSDataReadingUncached
error:&error];

我试过这个,但它没有编译:

Data(contentsOf: fileUrl, options: Data.ReadingOptions.dataReadingMapped | Data.ReadingOptions.uncached)

你可以试试

do {
// note it runs in current thread
let data = try Data(contentsOf:fileURL, options: [.alwaysMapped , .uncached ] )
print(data)
}
catch {
print(error)
}

你的 Swift 代码有两个问题。

首先,options需要作为数组的元素传入(不要像现在这样使用按位 OR 运算符 - 该方法在几个 Swift 版本中被弃用(:

[.dataReadingMapped, .uncached]

其次,此初始值设定项可能会引发异常,因此您需要考虑这一点。

有两种方法可以做到这一点:在 try-catch 块内,或通过可选的链接。

如果您希望能够捕获和响应特定错误,请使用 try-catch 块:

do {
let data = try? Data(contentsOf: fileURL, options: [.dataReadingMapped, .uncached])
// Do something with data
} catch {
print(error)
}

如果您不关心从特定错误中恢复,则可以使用可选的链接:

if let data = try? Data(contentsOf: fileURL, options: [.dataReadingMapped, .uncached]) {
// Do something with data
} else {
// It failed. Do something else.
}

我推荐苹果的Swift编程语言书,如果你有兴趣从Objective-C切换到Swift:

https://itunes.apple.com/us/book/swift-programming-language/id881256329

试试这个看看

do {
guard let fileURL = URL(string: "") else {
return
}
let data = try Data(contentsOf: fileURL , options: Data.ReadingOptions(rawValue: Data.ReadingOptions.alwaysMapped.rawValue | Data.ReadingOptions.uncached.rawValue))
print(data)
} catch {
//print(error)
}

最新更新