Swift错误处理

//自定义错误,用来表示购物错误

enum ShoppingError:Error{  // 采用了Error协议,而不是继承自Error类,在Swift中Error是个协议名字

    caseGoodsNotExist(String)      //商品不存在

    caseGoodsNotEnough(String)    //库存不足

    casepayNotEnough(String)      //付款金额不足


}

classShopping {    //表示购物的类

    //用字典存储商店中所有的商品

    vargoodsList = ["可口可乐":(price:3.5,number:100),

                     "士力架":(price:4.5,number:50),

                     "可比克薯片":(price:3.5,number:200),

                     "糯米滋":(price:0.75,number:100),

                     "双汇火腿肠":(price:1.5,number:150),

                     ]


    //定义一个方法,表示售卖商品

    //参数1:表示购买的商品名称

    //参数2:表示购买的数量

    //参数3:表示付的金额

    //throws:一般用于方法定义的返回值之前,表示将该方法做成一个可抛出错误的方法(throwing方法)

    //throw:一般用于方法体内,抛出某个具体的错误,如果能执行throw,后续语句都不会执行,该方法调用立即结束,等效于return语句

    funcbuyGoods(name:String,num:Int,pay:Double)throws->Void{


        guardletgoods =goodsList[name]else{

            //如果商品不存在,抛出“商品不存在”的错误

            throwShoppingError.GoodsNotExist("商品不存在")

        }

        //后续语句都表示商品存在的情况

        //如果购买的数量超过了商品的库存,抛出“库存不足”的错误

        guardgoods.number >= numelse{

            throwShoppingError.GoodsNotEnough("库存不足")

        }


        //如果付款金额不足,抛出“金额不足”的错误

        guardpay >= (goods.price *Double(num))else{

            throw  ShoppingError.payNotEnough("金额不足")

        }


        //计算找零

        letletfMoney = pay - goods.price *Double(num)


        //打印清单

        print("\(name)    \(goods.price)    \(num)    \(pay)  \(letfMoney)")

    }

}

var s = Shopping()

do{

trys.buyGoods(name:"可口可乐", num:50, pay:200)

}catchShoppingError.GoodsNotExist{


    print ("商品不存在")

}catchShoppingError.GoodsNotEnough{

    print("库存不足")

}catchShoppingError.payNotEnough{

    print("金额不足")

}

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

推荐阅读更多精彩内容