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

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

能放到try後面調用函數或方法都是有要求的,他們是有可能拋出錯誤,在這些函數或方法聲明的參數後面要加上throws關鍵字,表示這個函數或方法能夠拋出錯誤。java

聲明拋出錯誤方法示例代碼以下:微信

//刪除Note記錄方法
func remove(model: Note)
throws {
  ...
}
//查詢全部記錄數據方法
func findAll() throws
-> [Note] {
    ...
}

上述代碼remove(_:)方法沒有返回值,throws關鍵字放到參數後面。findAll()有返回值throws關鍵字放到參數和返回值類型之間。函數

 

在函數或方法中拋出錯誤網站

一個函數或方法可以聲明拋出錯誤,是由於在函數或方法中產生並拋出了錯誤,這樣函數或方法聲明拋出錯誤纔有實際的意義。spa

在產生並拋出錯誤方式:.net

  • 在函數或方法中經過throw語句,人爲地拋出錯誤。設計

  • 在函數或方法中調用的其餘能夠拋出錯誤函數或方法,可是沒有捕獲處理,會致使錯誤被傳播出來。code

    示例代碼以下:orm

//刪除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_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
 

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

相關文章
相關標籤/搜索