(原創)手把手,帶你學習Swift的do-try-catch錯誤處理模式

2020-12-15 李發展iOS

6.7 Swift的do-try-catch錯誤處理模式 [Swift原創教程]

1. 本節課將為你解析異常捕捉語句,該語句主要用於對異常和錯誤進行監測和處理。同時通過一個食品出售的實例,演示異常捕捉語句的具體用法。

2.首先定義一個Error類型的枚舉。

3.定義第一個枚舉成員,表示沒有指定的產品。

4.定義第二個枚舉成員,表示缺少錢幣而無法購買產品,同時顯示缺少金錢的數額。

5.定義第三個枚舉成員,表示貨存不足。

6.接著定義一個指定名稱的結構體,表示用於銷售的商品。

7.給結構體添加兩個屬性,表示商品的價格和數量。

8.定義一個變量,表示當前硬幣的總數。

9.定義一個類,表示售貨商店。

10.給類添加一個數組屬性,表示該商店擁有的商品種類、價格和數量。

11.添加一個名為銷售的方法,用來模擬產品銷售的動作。

12.和if-let類似,都是根據其後的表達式的布爾值,決定下一步做什麼。只是這樣做更加簡潔,可以避免過多的嵌套。

13.通過拋出關鍵詞,拋出異常,即提示錯誤的具體信息。當需要在函數或者方法裡拋出異常,使用throw就可以了。

14.判斷當商品的價格大於當前硬幣總數時,拋出硬幣不足的異常。

15.當以上異常均未發生時,即可正常進行交易。從硬幣總數之中,減去需要購買的商品的價格。

16.同時將商品的數量減1。

17.然後同步更新產品數組中的,當前被購買的商品的屬性信息。

18.並在控制臺輸出當前的商品名稱,作為購買的日誌。

19.現在我們可以模擬商品的銷售操作了。首先創建一所商店。

20.異常捕捉語句就是嘗試做一件事情,如果失敗則捕獲出現的錯誤。這裡首先嘗試捕捉非法產品的錯誤。

21.接著嘗試捕捉產品庫存不足的錯誤。

22.最後捕捉硬幣總數不夠的錯誤。

23.接著使用try語句,嘗試購買指定名稱的商品,然後點擊顯示調試區圖標,打開控制臺。

24.在控制臺可以看出,因為商店中沒有銷售指定的產品,所以輸出了非法商品的錯誤信息。

25.現在將購買的商品名稱進行修改,此時在控制臺輸出了商品被購買的日誌信息。點擊垂直滾動條,查看上方的內容。

26.從第45行右側的結果可以看出,因為購買了一次布丁,所以當前的硬幣總數為8。

27.當再次購買布丁時,由於硬幣總數8,小於布丁價格12,所以控制臺輸出了硬幣不足的錯誤提示。最後再次點擊此圖標,關閉控制臺,並結束本節課程。

28.

本文整理自《Swift4互動教程》APP, 非特殊說明,本文版權歸原作者所有。

文章標籤: iOS開發

個人分類: iOS移動開發

所屬專欄: iOS開發從入門到精通

每天幾分鐘,手把手帶你學習iOS開發

點擊關注李發展iOS」,即可第一時間獲取更多學習內容。

如果你有任何建議或意見,也請在評論區留言,感謝關注!

相關焦點

  • js錯誤處理,"try..catch"
    不管你多麼精通編程,有時我們的腳本總還是會出現錯誤。可能是因為我們的編寫出錯,或是與預期不同的用戶輸入,或是錯誤的服務端響應以及其他數千種原因。通常,如果發生錯誤,腳本就會「死亡」(立即停止),並在控制臺將錯誤列印出來。
  • 詳說Swift 2.0中的錯誤處理
    Swift 2.0中的錯誤處理在Swift 2.0中,如果想要拋出錯誤,那麼拋出的對象必須符合ErrorType協議。可能正如你所願,NSError就符合該協議。枚舉在這裡用來給錯誤進行分類。: throw AwfulError.Terrible // If you made it here, you can return: return SomeObject()}為了捕獲錯誤,新型的do-catch語句出現了:do { let theResult = try obj.doDangerousStuff
  • try..catch 不能捕獲的錯誤有哪些?注意事項又有哪些?
    今天的內容中,我們來學習一下使用try、catch、finally和throw進行錯誤處理。我們還會講一下 JS 中內置的錯誤對象(Error, SyntaxError, ReferenceError等)以及如何定義自定義錯誤。
  • Try..Catch 不能捕獲的錯誤有哪些?注意事項又有哪些?
    今天的內容中,我們來學習一下使用try、catch、finally和throw進行錯誤處理。我們還會講一下 JS 中內置的錯誤對象(Error, SyntaxError, ReferenceError等)以及如何定義自定義錯誤。
  • Swift 5.1 (15) - 可選連結
    級別:★☆☆☆☆標籤:「iOS」「Swift 5.1 」「try?」「try!」「do-catch」作者:沐靈洛審校:QiShare團隊錯誤的表示和拋出在Swift中,錯誤由符合Error協議的類型的值表示。Error是空協議,表示類型可用於錯誤處理。
  • try...catch 對JS的性能影響有多大?
    處理方式一:try…catch…try{ throw new Error('錯誤信息')}catch(err){ console.log(err);}使用 try...catch 語句包裹住預期可能出現異常的方法,然後在 catch 中處理。
  • 每日乾貨丨C++異常處理入門(try和catch)
    所謂拋出異常,就是報告一個運行時錯誤,程式設計師可以根據錯誤信息來進一步處理。上面的代碼中,下標 100 顯然超出了字符串 str 的長度。由於第 6 行代碼不會檢查下標越界,雖然有邏輯錯誤,但是程序能夠正常運行。而第 8 行代碼則不同,at() 函數檢測到下標越界會拋出一個異常,這個異常可以由程式設計師處理,但是我們在代碼中並沒有處理,所以系統只能執行默認的操作,也即終止程序執行。
  • 【JavaScript】try..catch 不能捕獲的錯誤有哪些?注意事項又有哪些?
    今天的內容中,我們來學習一下使用try、catch、finally和throw進行錯誤處理。我們還會講一下 JS 中內置的錯誤對象(Error, SyntaxError, ReferenceError等)以及如何定義自定義錯誤。
  • 面試須知(8):C#的異常處理機制(try...catch...finally)
    在 C# 語言中異常與異常處理語句包括三種形式,即 try catch、try finally、try catch finally。在上述三種異常處理的形式中所用到關鍵字其含義如下:try:一個 try 塊標識了一個將被激活的特定的異常的代碼塊。後跟一個或多個 catch 塊。
  • 【編碼】C++異常處理 - try,catch,throw,finally的用法
    因此一個派生類異常可能被處理其基類異常的catch子句捕獲,即使同時存在有能處理該派生類異常的catch子句,與相同的try塊相對應.如果一個處理派生類異常的catch子句位於處理基類異常的catch子句前面,編譯器會發出警告.(因為這樣的代碼在C++裡通常是不合法的)不過你最好做好預先防範:不要把處理基類異常的catch子句放在處理派生類異常的catch子句的前面.
  • 世上最真情的愛戀就是你在try我在catch(這我酸了……)
    本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】經微信公眾號授權轉載,如需轉載與原文作者聯繫一起學習、成長、溫情的熱愛生活有一種暖男叫catch,有一種真愛叫try—catch,世上最真情的愛戀就是你在try我在catch,無論你發什麼脾氣,我都靜靜的接受,默默地處理,不管你有什麼錯,我都會原諒你,愛著你。
  • JavaScript錯誤處理完全指南
    up}通常,try 處理最簡單的場景,或可能拋出錯誤的函數調用。異步世界中的錯誤處理 與同步世界是不一樣的。我們來看一些例子。開始探索 JavaScript 時,在學習了 try/catch/finally 之後,你可能會想將它放在任何代碼塊中。
  • 一分鐘打通JavaScript的try-catch
    1.2 利用try-catch來解決錯誤 從圖1-2我們能看出當try中的代碼發生錯誤時,利用catch可以進行異常處理,但是當try塊中的某一塊代碼發生錯誤時,後面的代碼將不會執行,所以我們應該儘量減少try塊的代碼
  • 為什麼不推薦使用try-catch-finally處理Java異常?
    比如finalizer、try-catch-finally、try-with-resources等等。finalizer機制可以關閉,但是其執行性不可預測,還有可能造成內存洩漏,所以一般不使用,雖然java9還提出了cleaner機制代替了finalizer機制,但是其執行依然不可預測,因此選擇就落在了try-catch-finally和try-with-resources之間。
  • 關於JavaScript錯誤處理最完整的指南
    例如,你可能想在堆棧中傳播一個異常,以使程序完全崩潰。出現致命的錯誤時可能就會是這種情況,因為停止程序比處理無效數據更安全。介紹了基礎知識之後,現在我們來研究 同步和異步 JavaScript 代碼中的錯誤和異常處理。同步代碼在大多數情況下很簡單,它的錯誤處理也是如此。
  • php中try catch捕獲異常實例詳解
    具體方法分析如下:php中try catch可以幫助我們捕獲程序代碼的異常了,這樣我們可以很好的處理一些不必要的錯誤了,感興趣的朋友可以一起來看看。PHP中try{}catch{}語句概述PHP5添加了類似於其它語言的異常處理模塊。在 PHP 代碼中所產生的異常可被 throw語句拋出並被 catch 語句捕獲。
  • java的try、catch、finally
    所以需要對可能發生的異常做一些處理,讓業務可以不被中斷,繼續做處理,或者給出一些更為友好的響應消息。這個時候就是java中的try、catch、finally大展身手的時候了。說到try、catch、finally,大家看看下面這段代碼,最後執行輸出的結果應該是什麼呢?
  • JavaScript 錯誤處理大全【建議收藏】
    同步錯誤處理異步錯誤處理Node.js中的錯誤處理Node.js 中的同步錯誤處理Node.js 中的異步錯誤處理:回調模式Node.js 中的異步錯誤處理:事件發射器總結❞編程中有什麼錯誤?異步代碼中的錯誤處理與同步代碼不同。看一些例子:計時器錯誤處理在你開始學習 JavaScript 時,當學 try/catch/finally 之後,你可能會想把它們放在任何代碼塊中。
  • try-catch-finally中的4個巨坑,老程式設計師也搞不定!
    {        num = 1;    } catch (Exception e) {        // do something    } finally {        // do something    }    // 確保 return 語句只在此處出現一次    return num;}坑
  • JS基礎-錯誤處理
    腳本出錯時,由於沒有上下文信息,讓人摸不著頭腦,ECMAScript 第 3 版致力於解決這個問題,專門引入了try-catch和throw等語句以及一些錯誤類型,意在讓開發人員能夠適當地處理錯誤,提升開發效率瀏覽器錯誤提示IE