Swift 将文件转换为字符串时的错误处理
Swift error handling when converting a file to string
背景
我正在编写一个从 webview 下载文件的应用程序。下载文件后,我正在检查它是否存在且没有问题。
问题
当我尝试将文件转换为字符串以便我可以操作数据时,我得到了臭名昭著的
Call can throw, but it is not marked with 'try' and the error is not
handled
我试图弄清楚如何处理错误,但我认为在我创建变量 content
的上下文中,我缺乏完成此任务的理解力。
例子
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url, url.lastPathComponent == "mydata.do" {
FileDownloader.download(from: url) { filepath in
let filemgr = FileManager.default
if filemgr.fileExists(atPath: filepath) {
// this line throws error
let content = String(contentsOfFile: filepath, encoding: String.Encoding.utf8)
print(content)
} else {
print("FILES DOES NOT EXIST!")
}
}
decisionHandler(.cancel)
} else {
decisionHandler(.allow)
}
}
问题
在创建字符串所在的变量时,将文件读取为字符串并处理错误的正确方法是什么?就我而言 content
.
let content = String(contentsOfFile: filepath, encoding: String.Encoding.utf8)
你应该用 try
将你的代码包装到一个 do-catch
块中,如果有 error
则捕捉:
do {
let data = try String(contentsOfFile: filepath, encoding: String.Encoding.utf8)
print(data)
} catch let error as NSError {
}
您可能会看到这种带有 try!
的语法,它会消除错误,但如果发生任何错误,它会崩溃,所以我可以推荐 do-catch
解决方案。
背景
我正在编写一个从 webview 下载文件的应用程序。下载文件后,我正在检查它是否存在且没有问题。
问题
当我尝试将文件转换为字符串以便我可以操作数据时,我得到了臭名昭著的
Call can throw, but it is not marked with 'try' and the error is not handled
我试图弄清楚如何处理错误,但我认为在我创建变量 content
的上下文中,我缺乏完成此任务的理解力。
例子
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url, url.lastPathComponent == "mydata.do" {
FileDownloader.download(from: url) { filepath in
let filemgr = FileManager.default
if filemgr.fileExists(atPath: filepath) {
// this line throws error
let content = String(contentsOfFile: filepath, encoding: String.Encoding.utf8)
print(content)
} else {
print("FILES DOES NOT EXIST!")
}
}
decisionHandler(.cancel)
} else {
decisionHandler(.allow)
}
}
问题
在创建字符串所在的变量时,将文件读取为字符串并处理错误的正确方法是什么?就我而言 content
.
let content = String(contentsOfFile: filepath, encoding: String.Encoding.utf8)
你应该用 try
将你的代码包装到一个 do-catch
块中,如果有 error
则捕捉:
do {
let data = try String(contentsOfFile: filepath, encoding: String.Encoding.utf8)
print(data)
} catch let error as NSError {
}
您可能会看到这种带有 try!
的语法,它会消除错误,但如果发生任何错误,它会崩溃,所以我可以推荐 do-catch
解决方案。