Swift的do-try-catch错误处理模式


import UIKit

enum ErrorType: Error{
    case invalidProduct  //没有指定产品
    case lackCoin(coinsLack: Int)  //缺少钱币
    case understock //存货不足
}

struct Product {  //商品
    var price: Int
    var count: Int
}
var totalCoins = 20  //金币总数

class Shop {
    var products =
        [
            "milk": Product(price: 12, count: 7),
            "bread": Product(price: 10, count: 4),
            "cookies": Product(price: 2, count: 5)
        ]
    
    func sell(productName: String) throws {
        guard let product = products[productName] else {
            throw ErrorType.invalidProduct
        }
        guard product.count > 0 else {
            throw ErrorType.understock
        }
        guard product.price <= totalCoins else {
            throw ErrorType.lackCoin(coinsLack: product.price - totalCoins)
        }
        
        totalCoins -= product.price
        var productCurrent = product
        productCurrent.count -= 1
        products[productName] = productCurrent
        
        print("我卖了一个\(productName)")
        
    }
}

class ViewController: UIViewController {

    var shop = Shop()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        do {
        // try shop.sell(productName: "wew")
            try shop.sell(productName: "milk")
            try shop.sell(productName: "milk")
        } catch ErrorType.invalidProduct {
            print("无效商品")
        } catch ErrorType.lackCoin(let coin) {
            print("还缺少\(coin)个金币")
        } catch ErrorType.understock {
            print("存货不足")
        } catch {
            print("未知错误")
        }
         
        print("哈哈哈,还可以继续执行")
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容