Swift 在處理例外的時候有很好用的語法,就是 try / throw / catch,可以多加利用,寫出沒有錯誤且崩潰的應用。
- try 嘗試行為
- throw 丟出例外
- catch 抓住例外
我們直接寫個範例,就能知道如何使用~
接著繼續閱讀全文~😌
我們來簡單寫程式碼定義:
// 例外列舉
enum ShoppingCartError: Error {
case cartIsFull
case emptyCart
}
// 項目結構
struct Item {
var price:Double
var name:String
}
// 輕型購物車類別
class LiteShoppingCart {
var items:[Item] = []
func addItem(item:Item) throws {
guard items.count < 5 else {
throw ShoppingCartError.cartIsFull
}
items.append(item)
}
func checkout() throws {
guard items.count > 0 else {
throw ShoppingCartError.emptyCart
}
// 繼續結帳
}
}
接著嘗試將項目加入購物車,可能的狀況有:
- 購物車為空
- 購物車裡項目數為 1- 5 個
- 購物車裡項目數為超過 6 個
1 和 3 的狀況會丟出例外,我們直接在 Playground 玩玩看吧~
let shoppingCart = LiteShoppingCart()
do {
// 加入項目
try shoppingCart.addItem(item: Item(price: 10, name: "Toy"))
try shoppingCart.addItem(item: Item(price: 20, name: "Toy2"))
try shoppingCart.addItem(item: Item(price: 30, name: "Toy3"))
try shoppingCart.addItem(item: Item(price: 40, name: "Toy4"))
try shoppingCart.addItem(item: Item(price: 50, name: "Toy5"))
print("Successfully added 5 items!")
try shoppingCart.addItem(item: Item(price: 100, name: "Toy6"))
// 進行結帳
try shoppingCart.checkout()
print("Successfully checked out the items!")
} catch ShoppingCartError.cartIsFull {
print("Couldn't add new items because the cart is full")
} catch ShoppingCartError.emptyCart {
print("The shopping cart is empty!")
} catch {
print(error)
}
試著直接執行,得到例外的結果:
Successfully added 5 items!
Couldn’t add new items because the cart is full
接著嘗試把所有項目都註解掉,得到例外的結果:
The shopping cart is empty!
再來僅加入一個項目,此就正常的結果:
Successfully checked out the items!
值得留意的是,在 do 執行動作中,一旦發生 throw 例外,其下面的程式碼就不會被執行呢~
以上是不是很有趣呢?以後寫程式前先仔細思考,會有哪些可能的狀況,然後處理所有狀況,就能避免非預期的錯誤囉~😊
參考:iOS 13 App 程式設計實戰心法。
隨意留個言吧:)~