《從零開始學Swift》學習筆記(Day 53)——do-try-catch錯誤處理模式
原創文章,歡迎轉載。轉載請註明:關東昇的部落格
Swift 1.x的錯誤處理模式存在很多弊端,例如:為了在程式設計時候省事,給error引數傳遞一個nil,或者方法呼叫完成後不去判斷error是否為nil,不進行錯誤處理。
let contents = NSString(contentsOfFile: filePath,
encoding: NSUTF8StringEncoding, error: nil)//error引數傳遞一個nil
或者
var err: NSError?
let contents = NSString(contentsOfFile: filePath, encoding: NSUTF8StringEncoding, error: &err)
不好的程式設計習慣,由於Objective-C和Swift 1.x沒有強制處理機制,因此一旦真的發生錯誤,程式就會發生崩潰。
同樣的從檔案中讀取字串示例,如果使用Swift 2錯誤處理模式程式碼如下:
import Foundation
do { //要做一些操作
let str = try NSString(contentsOfFile: filePath,
encoding: NSUTF8StringEncoding) //要嘗試做的事情
} catch let err as NSError { //如果失敗則進入catch程式碼塊
err.description
}
do-try-catch這種錯誤模式與Java中異常處理機制非常類似,本意就是嘗試(try)做一件事情,如果失敗則捕獲(catch)處理。
捕獲錯誤
完整的do-try-catch錯誤處理模式的語法如下:
do {
try 語句
成功處理語句組
} catch 匹配錯誤 {
錯誤處理語句組
}
在try 語句中可以產生錯誤,當然也可能不會產生錯誤,如果有錯誤發生,catch就會處理錯誤。catch程式碼塊可以有多個,錯誤由哪個catch程式碼塊處理是由catch後面的錯誤匹配與否而定的。錯誤型別的多少就決定了catch可以有多少。我們先介紹一下錯誤型別。
錯誤型別
在Swift中錯誤型別必須遵從ErrorType 協議,其次考慮到錯誤型別的匹配,它應該被設計成為列舉型別,列舉型別非常適合將一組相關值關聯起來。
如果我們編寫訪問資料庫表程式,實現對錶資料插入、刪除、修改和查詢等操作,我們會需要類似如下程式碼的錯誤型別:
enum DAOError: ErrorType {
case NoData
case PrimaryKeyNull
}
NoData表示沒有資料情況,PrimaryKeyNull表示表的主鍵(Primary Key)為空情況。
那麼我們就可以通過如下程式碼捕獲錯誤。
do {
//try 訪問資料表函式或方法
} catch DAOError.NoData {
print("沒有資料。")
} catch DAOError.PrimaryKeyNull {
print("主鍵為空。")
}
歡迎關注關東昇新浪微博@tony_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php
相關文章
- python Scrapy 從零開始學習筆記(一)Python筆記
- python Scrapy 從零開始學習筆記(二)Python筆記
- PHP從零開始系列二(學習筆記):序言PHP筆記
- PHP從零開始系列一(學習筆記):前言PHP筆記
- 從零開始學Electron筆記(六)筆記
- 從零開始學Electron筆記(七)筆記
- 從零開始學Electron筆記(二)筆記
- 從零開始學Electron筆記(四)筆記
- 從零開始學Electron筆記(五)筆記
- 從零開始學Electron筆記(一)筆記
- 從零開始學Electron筆記(三)筆記
- 學習Rust 錯誤處理Rust
- OpenCV影像處理學習筆記-Day1OpenCV筆記
- Java學習筆記-Day53 Servlet與JSPJava筆記ServletJS
- 從零開始JAVA資料結構學習筆記(一)Java資料結構筆記
- 從零開始學習機器學習機器學習
- 從零開始學習laravelLaravel
- 從零開始學習KafkaKafka
- 《javascript高階程式設計》學習筆記 | 21.2.錯誤處理JavaScript程式設計筆記
- rust學習十、異常處理(錯誤處理)Rust
- 從零開始機器學習機器學習
- 從零開始學五筆(一):概述
- 《Python深度學習從零開始學》簡介Python深度學習
- Golang 學習——error 錯誤處理淺談GolangError
- 從零開始機器學習-03機器學習
- 從零開始機器學習--4機器學習
- 從零開始機器學習--05機器學習
- 從零開始學習 Go ——安裝Go
- 從零開始學習C++(0)C++
- swift學習筆記《1》Swift筆記
- swift學習筆記《4》Swift筆記
- 從零開始學設計模式(七)—橋接模式設計模式橋接
- React學習筆記-事件處理React筆記事件
- 從零開始的Unity個人學習日記(二)Unity
- 從零開始學機器學習——瞭解聚類機器學習聚類
- 從零開始學機器學習——入門NLP機器學習
- 《谷歌JAX深度學習從零開始學》簡介谷歌深度學習
- swift學習筆記《2》-swift語法Swift筆記
- 從零開始學PythonPython