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 解决方案。