《從零開始學Swift》學習筆記(Day 53)——do-try-catch錯誤處理模式

原創文章,歡迎轉載。轉載請註明:關東昇的博客  php

Swift 1.x的錯誤處理模式存在不少弊端,例如:爲了在編程時候省事,給error參數傳遞一個nil,或者方法調用完成後不去判斷error是否爲nil,不進行錯誤處理。java

let contents = NSString(contentsOfFile: filePath, 
        Êencoding: NSUTF8StringEncoding, error: nil)//error參數傳遞一個nil

或者數據庫

var err: NSError?    
let contents = NSString(contentsOfFile: filePath, 
        Êencoding: NSUTF8StringEncoding, error: &err)

很差的編程習慣,因爲Objective-CSwift 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錯誤處理模式的語法以下:spa

do {
    try 語句
  成功處理語句組 
} catch 匹配錯誤 {
    錯誤處理語句組
}

try 語句中能夠產生錯誤,固然也可能不會產生錯誤,若是有錯誤發生,catch就會處理錯誤。catch代碼塊能夠有多個,錯誤由哪一個catch代碼塊處理是由catch後面的錯誤匹配與否而定的。錯誤類型的多少就決定了catch能夠有多少。咱們先介紹一下錯誤類型。.net

 

錯誤類型設計

Swift中錯誤類型必須聽從ErrorType 協議,其次考慮到錯誤類型的匹配,它應該被設計成爲枚舉類型,枚舉類型很是適合將一組相關值關聯起來。

若是咱們編寫訪問數據庫表程序,實現對錶數據插入、刪除、修改和查詢等操做,咱們會須要相似以下代碼的錯誤類型:

enum DAOError: ErrorType {
    case NoData
    case PrimaryKeyNull
}

NoData表示沒有數據狀況,PrimaryKeyNull表示表的主鍵(Primary Key)爲空狀況。

那麼咱們就能夠經過以下代碼捕獲錯誤。

do {  
    //try 訪問數據表函數或方法
} catch DAOError.NoData {
    print("沒有數據。")
} catch DAOError.PrimaryKeyNull {
    print("主鍵爲空。")
}

 

歡迎關注關東昇新浪微博@tony_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
 

更多精品iOSCocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php

相關文章
相關標籤/搜索