Swift 中 throws 異常丟擲
一.異常丟擲關鍵 throws 定義在函式結尾 如果函式有返回值 定義在 返回型別前如 :
func throwDeliver(num:Int) throws ->String
二.定義方法
//錯誤傳遞
@discardableResult
func throwDeliver(num:Int) throws ->String {
print("錯誤傳遞")
try numberTest(num: num)
print("未傳遞錯誤")
return "無錯誤"
}
func numberTest(num:Int) throws{
if num == 1 {
print("成功")
}else if num == 2 {
throw OperationError.ErrorTwo
}else if num == 3{
throw OperationError.ErrorThree("失敗")
}else {
throw OperationError.ErrorOther
}
}
三、使用
1. 禁止異常傳遞,只有當你確定這個語句不會丟擲異常你才可以這麼做否則會引發執行時錯誤
print(try? throwDeliver(num: 1)+":禁止錯誤傳遞")
錯誤傳遞 成功 未傳遞錯誤 Optional("無錯誤:禁止錯誤傳遞")
print(try? throwDeliver(num: 5)+":禁止錯誤傳遞")
錯誤傳遞 nil
在執行到
print("錯誤傳遞")
try numberTest(num: num) 丟擲異常 後續程式碼不在走下去
2.將異常轉換成可選值,如果一個語句會丟擲異常那麼它將返回nil無論這個語句本來的返回值是什麼:
if let retureMessage = try? throwDeliver(num: 1) {
print("可選值非空:"+retureMessage)
}
錯誤傳遞 成功 未傳遞錯誤 可選值非空:無錯誤if let retureMessage = try? throwDeliver(num: 5) {
print("可選值非空:"+retureMessage)
}
錯誤傳遞
3.使用do-catch捕獲處理異常,在do閉包裡面執行會丟擲異常的程式碼,在catch 分支裡面匹配異常處理異常
do {
print("do-catch 錯誤捕獲")
try throwDeliver(num: 1)
print("未捕獲錯誤")
} catch OperationError.ErrorOne {
print("ErrorOne:")
} catch OperationError.ErrorTwo {
print("ErrorTwo:")
} catch OperationError.ErrorThree(let discription) {
print("ErrorThree:"+discription)
}catch let discription{
print(discription)
}
do-catch 錯誤捕獲 錯誤傳遞 成功 未傳遞錯誤 未捕獲錯誤do {
print("do-catch 錯誤捕獲")
try throwDeliver(num: 5)
print("未捕獲錯誤")
} catch OperationError.ErrorOne {
print("ErrorOne:")
} catch OperationError.ErrorTwo {
print("ErrorTwo:")
} catch OperationError.ErrorThree(let discription) {
print("ErrorThree:"+discription)
}catch let discription{
print(discription)
}
do-catch 錯誤捕獲 錯誤傳遞 ErrorOther
也可以在 catch 後不加 條件選擇 直接輸出 系統丟擲的錯誤資訊
do {
try throwDeliver(num: 3)
print("未捕獲錯誤")
} catch
{
print(error)
}
錯誤傳遞 ErrorOther
相關文章
- Java異常十一:使用throw丟擲異常物件;throw和throws的區別Java物件
- 啪,還敢丟擲異常
- oracle主動丟擲異常Oracle
- 中介軟體中丟擲異常,Handler中無法捕獲
- 擷取Spring框架自動丟擲異常Spring框架
- 異常-throws的方式處理異常
- SpringBoot中SpringSecurity 中不能丟擲異常UserNameNotFoundException 問題解析與處理Spring BootGseException
- migrate:rollback 時 dropForeign 丟擲的異常解決方案
- Shiro身份驗證丟擲AuthenticationException異常,解決方案Exception
- 易優cms404頁面 丟擲HttpException異常HTTPException
- 高效Java:丟擲適合抽象的異常 - Kyle CarterJava抽象
- 異常處理方式throws
- java中異常丟擲後程式碼還會繼續執行嗎Java
- Laravel 框架中 使用 Symfony 提供的方法 丟擲不同型別錯誤異常Laravel框架型別
- Golang 迴圈異常丟擲不影響整個請求Golang
- Day42--異常向上丟擲
- OpenCV 3.0後的 xfeatures2d 中detect()函式丟擲異常處理OpenCV函式
- [譯] Ruby 2.6 Kernel 的system 方法增加是否丟擲異常引數。
- Laravel 8 表單驗證丟擲異常返回 json 格式資料LaravelJSON
- 甩鍋(throws)_ java異常(Exception)處理JavaException
- 程式碼安全測試第三十期:丟擲通用異常缺陷
- Java中異常分類和Throw和Throws的區別Java
- XCode除錯時丟擲異常,定位到某一行程式碼XCode除錯行程
- 錯誤: 代理丟擲異常錯誤: java.rmi.server.ExportException: Port already in use: 1099;JavaServerExportException
- 異常-throw的概述以及和throws的區別
- Java foreach 中List移除元素丟擲ConcurrentMJava
- 中介軟體自定義檢測 JWT 並通過自定義異常丟擲錯誤--筆記JWT筆記
- 程式碼中如果遇到未定義的變數,會丟擲異常嗎?程式還會不會繼續往下走?變數
- JPA事務中的異常最後不也丟擲了,為什麼沒被catch到而導致回滾?
- Redis client之Jedis線上程執行丟擲異常無法恢復的情形和解決方案Redisclient
- 異常處理機制(一)之throw與throws的區別
- 技術日誌 - API 中使用 Laravel form 表單驗證丟擲異常如何返回 API 格式資料APILaravelORM
- Solon 用 throw 丟擲資料
- [譯]Ruby 2.6 會在begin..end 程式碼塊中因為不寫rescue 只寫 else 而丟擲異常[實驗性Feature]
- 啟動tomcat時 錯誤: 代理丟擲異常 : java.rmi.server.ExportException: Port already in use: 1099的解決辦法TomcatJavaServerExportException
- WPF 的 Viewport3D 等 3D 模組在帶 Intel UHD 770 裝置上丟擲渲染異常View3DIntel
- Swift中Class和Struct異同SwiftStruct
- UNO 已知問題 在後臺執行緒觸發 SKXamlCanvas 的 Invalidate 且在 PaintSurface 事件丟擲異常將炸掉應用執行緒CanvasAI事件