日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Swift 异常处理

發布時間:2025/7/25 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swift 异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

  • 在 Swift 1.0 時代是沒有異常處理和拋出機制的。

    • 如果要處理異常,要么使用 if else 語句或 switch 語句判斷處理。
    • 要么使用閉包形式的回調函數處理。
    • 再要么就使用 NSError 處理。
  • 以上這些方法都不能像 Java 中的 try catch 異常控制語句那樣行如流水、從容不迫的處理異常,而且也會降低代碼的可讀性。

  • 在 Swift 2.0 中 Apple 提供了使用 throws、throw、try、do、catch 這五個關鍵字組成的異常控制處理機制。

1、建造異常類型

  • 在 iOS 開發當中,我們會面對很多異常處理。

    • 在 Cocoa Touch 中使用 Error 來進行異常處理。
    • 從 Swift 2.0 開始,可以使用 Error protocol。
  • 在 Swift 中,enum 是建立屬于你自己的異常類型的最好的方法,你只要在你的 enum 中確認新的 Error。

    enum MyError: Error {case notExistcase outOfRange }
  • 在拋出異常之前,我們需要在函數或方法的返回箭頭 -> 前使用 throws 關鍵字來標明將會拋出異常。

    // 有返回值,在 -> 前加 throws func myMethodRetrunString() throws -> String // 聲明將會拋出異常// 沒有返回值,在方法末尾加 throws func myMethodRetrunNothing() throws // 聲明將會拋出異常

2、拋出異常

  • 聲明之后,在函數或者方法里使用 throw 關鍵字扔出異常,throw 之后的代碼不會再被執行。

    func myMethodRetrunNothing() throws {// ...// item is an optional valueguard let item = item else {// need throws the error outthrow MyError.notExist // 拋出異常}// do with item }

3、獲取并處理異常

  • Swift 中使用 try-catch 機制獲取和處理異常。

    do {try 可拋出異常的方法或函數} catch {// 處理異常情況,默認錯誤對象 error }
  • 在 catch {} 中,不需要顯示的指定錯誤對象,你會默認捕獲一個錯誤對象 error,如果你想替換這個名字,可以使用 cache (let aError) {} 即可。

    do {try 可拋出異常的方法或函數} catch (let aError) {// 處理異常情況,錯誤對象 aError }
  • try-catch 機制簡單易懂,很多編程語言也使用類似的機制進行異常處理,但是在 Swift 中有一個比較重要的特性。catch 和 switch 一樣具有模式匹配(Pattern Matching)的能力,所以使用 catch 時可以對異常的解析進行更為高級的處理。

    do {try myMethodRetrunNothing()} catch MyError.notExist {// deal with not exist} catch MyError.outOfRange {// deal with out of range} catch {// deal with other error }

4、不處理異常

  • 和可選型類似,編譯器強制我們在使用可能拋出錯誤的方法時使用 try 關鍵字,既可以使用完整的 try-catch 捕獲,也可以使用 try? 和 try!。

    • try? 有點類似于可選型中的可選鏈,如果方法正確,則完全執行,如果拋出錯誤,則方法提前結束,但不會對拋出的錯誤進行處理。
    • try! 的用法類似于可選型中的強制解包,同樣不會對錯誤進行處理,但是一旦方法拋出錯誤,就會造成整個程序的崩潰。
    try? myMethodRetrunNothing()try! myMethodRetrunNothing()

5、總結

  • 使用 Error 的幫助建立你的異常類型。
  • 使用 throws 來聲明異常,用 throw 來拋出異常。
  • 使用 try-catch 機制來獲取和處理異常。

  • 下面來舉例看看如何使用,用使用手機刷朋友圈為例。首先我們需要定義異常枚舉,從 Swift 2.0 中開始 Apple 提供了 Error 協議,我們自定義的異常枚舉需要遵循

    // 定義異常枚舉 enum WechatError: Error {case noBattery // 手機沒電case noNetwork // 手機沒網case noDataStream // 手機沒有流量 }
  • 我們定義了導致不能刷微信的錯誤枚舉 WechatError,然后定義一個檢查是否可以刷微信的方法 checkIsWechatOk()

    // 定義異常拋出方法 func checkIsWechatOk(isPhoneHasBattery: Bool,isPhoneHasNetwork: Bool,dataStream: Int) throws {guard isPhoneHasBattery else {throw WechatError.noBattery}guard isPhoneHasNetwork else {throw WechatError.noNetwork}guard dataStream > 50 else {throw WechatError.noDataStream} }
  • 在方法名后有 throws 關鍵字,意思為該方法產生的異常向上層拋出,在方法體內使用 guard 語句對各種狀態進行判斷,然后使用 throw 關鍵字拋出對應的異常。然后我們定義刷微信的方法。

    // 定義刷微信的方法 func playWechat(isPhoneHasBattery: Bool, isPhoneHasNetwork: Bool, dataStream: Int) {do {try checkIsWechatOk(isPhoneHasBattery: isPhoneHasBattery,isPhoneHasNetwork: isPhoneHasNetwork,dataStream: dataStream)print("放心刷,刷到天昏地暗!")} catch WechatError.noBattery {print("手機都沒電,刷個鬼啊!")} catch WechatError.noNetwork {print("沒有網絡哎,洗洗玩單機吧!")} catch WechatError.noDataStream {print("沒有流量了,去蹭Wifi吧!")} catch {print("見鬼了!")} }playWechat(isPhoneHasBattery: true, isPhoneHasNetwork: true, dataStream: 60) // 放心刷,刷到天昏地暗! playWechat(isPhoneHasBattery: true, isPhoneHasNetwork: false, dataStream: 60) // 沒有網絡哎,洗洗玩單機吧! playWechat(isPhoneHasBattery: false, isPhoneHasNetwork: true, dataStream: 60) // 手機都沒電,刷個鬼啊! playWechat(isPhoneHasBattery: true, isPhoneHasNetwork: true, dataStream: 30) // 沒有流量了,去蹭Wifi吧!
    • 上述的代碼示例中,首先檢查是否可以刷微信的方法前使用 try 關鍵字,表示允許該方法拋出異常,然后使用了 do catch 控制語句捕獲拋出的異常,進而做相關的邏輯處理。

轉載于:https://www.cnblogs.com/QianChia/p/8670872.html

總結

以上是生活随笔為你收集整理的Swift 异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。