《從零開始學Swift》學習筆記(Day54)——丟擲錯誤

智捷關東昇發表於2016-03-25

原創文章,歡迎轉載。轉載請註明:關東昇的部落格

  能放到try後面呼叫函式或方法都是有要求的,他們是有可能丟擲錯誤,在這些函式或方法宣告的引數後面要加上throws關鍵字,表示這個函式或方法可以丟擲錯誤。  
  宣告丟擲錯誤方法示例程式碼如下:  

//刪除Note記錄方法
func remove(model: Note) throws {
    ...
}
//查詢所有記錄資料方法
func findAll() throws -> [Note] {
    ...

}

  上述程式碼remove(_:)方法沒有返回值,throws關鍵字放到引數後面。findAll()有返回值throws關鍵字放到引數和返回值型別之間。   

在函式或方法中丟擲錯誤  
  一個函式或方法能夠宣告丟擲錯誤,是因為在函式或方法中產生並丟擲了錯誤,這樣函式或方法宣告丟擲錯誤才有實際的意義。  
在產生並丟擲錯誤方式:  

  • 在函式或方法中通過throw語句,人為地丟擲錯誤。  

  • 在函式或方法中呼叫的其他可以丟擲錯誤函式或方法,但是沒有捕獲處理,會導致錯誤被傳播出來。
    示例程式碼如下: 

    //刪除Note方法
     func remove(model: Note) throws {        
    
    
    guard let date = model.date else {        //判斷丟擲時候是有了guard語句
    //丟擲"主鍵為空"錯誤
    throw DAOError.PrimaryKeyNull        
    }
    //比較日期主鍵是否相等
    for (index, note) in listData.enumerate() where note.date == date {
    listData.removeAtIndex(index)
    }
    }
    
    
      //查詢所有資料方法
    func findAll() throws -> [Note] {        
    
    
    guard listData.count > 0 else {            //判斷丟擲時候是有了guard語句
    //丟擲"沒有資料"錯誤。
    throw DAOError.NoData            
    }
    return listData
     }
    
    
    func printNotes() throws {                //宣告丟擲錯誤
    
    
    let datas  = try findAll()            
    for note in datas {
    print("date : \(note.date!) - content: \(note.content!)")
    }  
    }  
    

    try printNotes()

      guard語句最擅長處理這種早期判斷,條件為false情況下丟擲錯誤。  
    findAll()語句本身有可能產生錯誤,但是並沒有使用catch語句捕獲並處理,這樣就導致了這個錯誤傳播給該  函式或方法的呼叫者,如果它的呼叫者也都不捕獲處理,那麼最後程式會出現執行期錯誤。

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

enter image description here

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

相關文章