我正在尝试使用装饰器模式在Swift中实现一个简单的咖啡店模拟器。
我相信我的实现有点正确,但在构建项目时会产生编译错误 - SegFault。
我知道Swift仍在开发中,但我想知道我做错了什么。
快速解释代码 - 我正在尝试创建一种Espresso类型的饮料,然后用Milk类装饰它。
//
// main.swift
// CoffeeShop
import Foundation
import Cocoa
protocol Beverage {
var description:String { get set }
func cost() -> Float
}
class HouseHoldBlen:Beverage {
var description = "House Hold Blend Coffee"
func cost() -> Float {
return 0.89
}
}
class Espresso:Beverage {
var description = "Esspresso"
func cost() -> Float {
return 1.99
}
}
protocol CondimentDecorator:Beverage {
func getDesc() -> String
}
class Milk<B:Beverage>:CondimentDecorator {
var description = "Milk"
var beverage:B
init(bev:B){
self.beverage = bev
}
func getDesc() -> String {
return self.beverage.description + self.description
}
func cost() -> Float {
return self.beverage.cost() + 0.10
}
}
var bev1:Beverage = Espresso()
println(bev1.cost())
bev1 = Milk(bev: bev1) //This line seems to be the problem.
//println(bev1.cost())
每当我尝试使用新类实际装饰现有的Beverage对象时,似乎会出现问题。