2017-06-09 46 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解決方案。