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中無法捕獲
- 異常-throws的方式處理異常
- 高效Java:丟擲適合抽象的異常 - Kyle CarterJava抽象
- C++程式丟擲異常後執行順序C++
- hibernate open session in view 丟擲異常解決方法SessionView
- java中異常丟擲後程式碼還會繼續執行嗎Java
- Laravel 框架中 使用 Symfony 提供的方法 丟擲不同型別錯誤異常Laravel框架型別
- SpringBoot中SpringSecurity 中不能丟擲異常UserNameNotFoundException 問題解析與處理Spring BootGseException
- Golang 迴圈異常丟擲不影響整個請求Golang
- WCF服務端丟擲的異常會跑到客戶端服務端客戶端
- scope="session"和scope="request"--丟擲異常非常的bug+垃圾Session
- migrate:rollback 時 dropForeign 丟擲的異常解決方案
- Shiro身份驗證丟擲AuthenticationException異常,解決方案Exception
- [譯] Ruby 2.6 Kernel 的system 方法增加是否丟擲異常引數。
- 建構函式與解構函式是否可以丟擲異常函式
- jdon安裝不知丟擲空指標的異常出現在哪 求教指標
- OpenCV 3.0後的 xfeatures2d 中detect()函式丟擲異常處理OpenCV函式
- Java中異常分類和Throw和Throws的區別Java
- 甩鍋(throws)_ java異常(Exception)處理JavaException
- 程式碼安全測試第三十期:丟擲通用異常缺陷
- Laravel 8 表單驗證丟擲異常返回 json 格式資料LaravelJSON
- JAVA操作MySQL tImestamp列值為0時丟擲異常的處理~JavaMySql
- Swift 中的錯誤與異常Swift
- 異常-throw的概述以及和throws的區別
- XCode除錯時丟擲異常,定位到某一行程式碼XCode除錯行程
- Swift 異常處理Swift
- 中介軟體自定義檢測 JWT 並通過自定義異常丟擲錯誤--筆記JWT筆記
- Redis client之Jedis線上程執行丟擲異常無法恢復的情形和解決方案Redisclient
- java多執行緒:執行緒體往外丟擲異常的處理機制實踐Java執行緒
- 在 python 中,如果 x 是 list,為什麼 x += "ha" 可以執行,而 x = x + "ha" 卻丟擲異常呢Python
- 異常處理機制(一)之throw與throws的區別
- 錯誤: 代理丟擲異常錯誤: java.rmi.server.ExportException: Port already in use: 1099;JavaServerExportException
- Java 建立使用者異常類、將異常一直向上拋、 throw和throws的區別Java
- Java foreach 中List移除元素丟擲ConcurrentMJava