你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 《從零開始學Swift》學習筆記(Day 53)——do-try-catch錯誤處理模

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

編輯:IOS開發綜合
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沒有強制處理機制,因此一旦真的發生錯誤,程序就會發生崩潰。
同樣的從文件中讀取字符串示例,如果使用Swift2錯誤處理模式代碼如下:

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("沒有數據。")
} catchDAOError.PrimaryKeyNull {
    print("主鍵為空。")
}

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved