<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                錯誤處理是在程序中響應錯誤和處理錯誤恢復程序正常運行的過程。Swift提供了拋出、捕獲、傳播和操作可恢復的過程。 有的操作不是每次都能執行成功的,而可選鏈是用來判斷有沒有值,但操作失敗時,無法知道失敗的原因。錯誤處理就是幫助你了解失敗的原因,方便你做出相應的反應。 比如我們在網絡傳輸時,會遇到各種各樣的突發情況導致數據傳輸失敗。這時,通過錯誤處理機制,就能有效的提示用戶當前是因為那種錯誤導致網絡出錯。 ## 聲明錯誤 聲明錯誤用到了枚舉,其中枚舉實現ErrorType協議。這里我們使用枚舉聲明一個簡單的錯誤。 ~~~ /// 錯誤枚舉,需ErrorType協議 enum ErrorEnum: ErrorType { case Default // 普通錯誤 case Other(tag: Int) // 高級錯誤,可攜帶數據 } ~~~ 這里面有兩個錯誤Default和Other,其中Other可攜帶數據。 ## 拋出錯誤 我們聲明了錯誤后,就在類中拋出錯誤,拋出錯誤只需要使用throw。 ~~~ throw ErrorEnum.Other(tag: 5) ~~~ 區別常見的方法,能夠拋出錯誤的方法體,需要添加throw。 ~~~ // 可拋出錯誤的方法體 func canThrowErrors() throws -> String // 常見方法體 func cannotThrowErrors() -> String ~~~ 這里我們創建一個類SomeClass,在類SomeClass中有一個能拋錯的方法體。 ~~~ class SomeClass { func canThrowErrors(str: String) throws { // 當str不為Default時,輸出錯誤 guard str == "Default" else { throw ErrorEnum.Default } // 當str部位Other時輸出錯誤 guard str == "Other" else { throw ErrorEnum.Other(tag: 5) } } } ~~~ 這里用到了guard校驗,然后拋出錯誤。如果你不知道guard語法,可查閱我的博文《[Swift控制流](http://blog.csdn.net/y550918116j/article/details/49428647)》。 ##處理錯誤 在Swift捕獲錯誤使用do-catch語法,如下所示: ![錯誤處理](https://box.kancloud.cn/2016-06-01_574e9af9024ab.jpg "") 如圖所示,你要執行的代碼放在do的括號內,執行可拋出錯誤的代碼使用try;catch就是捕獲的意思,會執行每一個catch,匹配成功后,則執行內部代碼,和switch中的case很像;where代表條件匹配,在錯誤匹配成功后,還要匹配where后的語句才會執行內部代碼。如下所示: ~~~ do { try sClass.canThrowErrors("Default") try sClass.canThrowErrors("Other") } catch ErrorEnum.Default { print("默認錯誤") } catch ErrorEnum.Other(let tag) where tag == 5 { print("錯誤代碼:\(tag)") } catch ErrorEnum.Other(let tag) { print("其他錯誤:\(tag)") } catch { // 在捕獲中,隱式攜帶error錯誤。 print("未知錯誤:\(error)") } ~~~ 其中第一個try拋錯后,則不會執行第二個try。 如果你不想寫這么繁瑣,Swift也支持只寫一行代碼,使用’!’。如: ~~~ try! sClass.canThrowErrors("Default") ~~~ 請慎重使用’!’,容易引起程序閃退。 ## 其他 ### 參考資料 [The Swift Programming Language (Swift 2.1)](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html) ### 文檔修改記錄 | 時間 | 描述 | |-----|-----| | 2015-11-1 | 根據 [The Swift Programming Language (Swift 2.1)](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html)中的Error Handling總結 | 版權所有:[http://blog.csdn.net/y550918116j](http://blog.csdn.net/y550918116j)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看