2017-06-09 35 views
-3

背景斯威夫特错误将文件转换为字符串

我写下载从网页视图文件的应用程序时处理。当文件被下载时,我检查是否存在问题。

问题

当我尝试将文件转换为字符串,所以我可以操纵我得到了臭名昭著的

呼叫可以抛出数据,但没有打上“尝试”且误差不 处理

我试图找出如何处理错误,但我认为方式的背景下,我创建变量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) 
+1

您应该阅读方法的文档:https://developer.apple.com/documentation/foundation/nsstring/1412610-init以及显示如何在讨论中管理错误的部分 – Larme

回答

1

你应该换你的代码放到一个do-catch块与try,赶上error如果有任何:

do { 
    let data = try String(contentsOfFile: filepath, encoding: String.Encoding.utf8) 
    print(data) 
} catch let error as NSError { 

} 

You'll可能看到这种语法与try!这将删除错误,但如果发生任何错误,这将会崩溃,所以我可以推荐do-catch解决方案。