首页 > 其他 > 详细

swif-throws异常抛出

时间:2016-12-30 16:55:49      阅读:193      评论:0      收藏:0      [点我收藏+]
import UIKit

enum VendingMachineError: Error {
    case invalidSelection //选择无效
    case insufficientFunds(coinsNeeded: Int) //金额不足
    case outOfStock //缺货
    
}

struct Item {
    var price: Int
    var count: Int
}

class VendingMachine {
    var inventory = [
        "Candy Bar": Item(price: 12, count: 7),
        "Chips": Item(price: 10, count: 4),
        "Pretzels": Item(price: 7, count: 11)
    ]
    //货币沉淀
    var coinsDeposited = 0
    func dispenseSnack(snack: String) {
        print("Dispensing \(snack)")
    }
    func vend(itemNamed name: String) throws {
        guard let item = inventory[name] else {
            throw VendingMachineError.invalidSelection
        }
        guard item.count > 0 else {
            throw VendingMachineError.outOfStock
        }
        guard item.price <= coinsDeposited else {
            throw VendingMachineError.insufficientFunds(coinsNeeded: item.price - coinsDeposited)
        }
        coinsDeposited -= item.price
        var newItem = item
        newItem.count -= 1
        inventory[name] = newItem
        print("Dispensing \(name)")
    }
}


class First_Demo3: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationItem.title = "throws异常抛出"
        self.view.backgroundColor = UIColor.white
        
        
        let vend = VendingMachine()
        //货币沉淀
        vend.coinsDeposited = 5

        /*
         try抓取异常,如果执行成功,那么执行 vend.vend(itemNamed: "Pretzels")。cathch 完枚举的三个错误以后,要把catch关闭,即:
注意:最后加入一个空的catch,否则则会报错 Error throw from are not handled because the enclosing catch is not exhaustive  意思就是catch没有关闭。
         */
        
        do {
            try  vend.vend(itemNamed: "Pretzels")
            // 没有错误抛出
        }catch VendingMachineError.invalidSelection{
            print("选择无效")
            // 有错误抛出
        }catch VendingMachineError.outOfStock{
            print("缺货")
        }catch VendingMachineError.insufficientFunds(let coinsNeeded){
            print("还差\(coinsNeeded)货币")
        }catch {
            
        }

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
}

 

 

swif-throws异常抛出

原文:http://www.cnblogs.com/sayimba/p/6237235.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!