enum ErrorType: Error {
case invalidType
case outOfStack
case needMoreCoins(count: Int)
}
struct Item {
var price: Int
var count: Int
}
class SaleMachine {
//定義商品類型
var itemType = [
"Chocolote" : Item(price: 8, count: 6),
"bread" : Item(price: 5, count: 7),
"Chips" : Item(price: 6, count: 4)
]
//定義投幣數(shù)量
var coinsDeposited = 0
//購買函數(shù)
func buySomeThings(itemName: String) throws {
defer {
print("退出清理") //不管有沒有錯(cuò)誤拋出 都會(huì)調(diào)用台汇。 相當(dāng)于finally涵妥。
}
print("開始售賣")
guard let item = itemType[itemName] else {
throw ErrorType.invalidType
}
guard item.count > 0 else {
throw ErrorType.outOfStack
}
guard coinsDeposited >= item.price else {
throw ErrorType.needMoreCoins(count: item.price - coinsDeposited)
}
//正常售賣操作
coinsDeposited -= item.price
var newItem = item
newItem.count -= 1
itemType[itemName] = newItem
print("售賣成功")
}
}
var machine = SaleMachine()
machine.coinsDeposited = 3
do {
try machine.buySomeThings(itemName: "bread")
} catch ErrorType.invalidType {
print("no such things")
} catch ErrorType.outOfStack {
print("out of stack")
} catch ErrorType.needMoreCoins(let needCoins) {
print("need more coins:\(needCoins)")
} catch {
print("沒有預(yù)想到的錯(cuò)誤棠笑, 兜底用的")
}
/**
open: 允許其他模塊訪問娜谊、繼承杜跷、復(fù)寫喜最。 只有類類型才可以用open戈鲁, 結(jié)構(gòu)體等不可以用open修飾帚称,用public
public: x允許其他模塊訪問,但是不能繼承蓬痒、復(fù)寫
internal: 默認(rèn)的類型泻骤,模塊內(nèi)部可以訪問
private: 私有的。 擴(kuò)展extension 在同一個(gè)文件里 可以訪問private類里的屬性
fileprivate: 文件內(nèi)私有梧奢, 本文件內(nèi)使用狱掂。
*/