原創文章,歡迎轉載。轉載請註明:關東昇的博客 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_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php