→ Success와 Faillure를 사용해 가독성있는 에러처리 가능

enum McDonaldOrderError : Error{
    case invalidSelection
    case lackOfMoney
    case outOfStock
}

struct Hamburger{
    var name : String
    var price : Int
    var count : Int
}

let bigMac = Hamburger(name: "BigMac", price: 4600, count: 3)
let money = 4000

func orderMcDonaldMenu(orderMenu: Hamburger) throws{
    if orderMenu.name != "BigMac"{
        throw McDonaldOrderError.invalidSelection
    }
    if orderMenu.price > money{
        throw McDonaldOrderError.lackOfMoney
    }
    if orderMenu.count == 0 {
        throw McDonaldOrderError.outOfStock
    }
}

do{
    try orderMcDonaldMenu(orderMenu: bigMac)
}catch McDonaldOrderError.invalidSelection{
    print("잘못된 선택입니다.")
}catch McDonaldOrderError.outOfStock{
    print("재고 부족.")
}catch McDonaldOrderError.lackOfMoney{
    print("잔액이 부족합니다..")
}
let order = orderMcDonaldMenu(orderedMenu: Hamburger(name: "BigMac", price: 4600, count: 4))
switch order
{
case .success(let data):
    print(data)
case .failure(let error):
    print(error)
}

→코드의 가독성이 상승한 거같다.