有人可以帮助解释Ray Wenderlich网站上的这个协议和扩展:
struct Pizza {
let ingredients: [String]
}
protocol Pizzeria {
func makePizza(ingredients: [String]) -> Pizza
//func makeMargherita() -> Pizza
}
extension Pizzeria {
func makeMargherita() -> Pizza {
return makePizza(ingredients: ["tomato", "mozzarella"])
}
}
struct Lombardis: Pizzeria {
func makePizza(ingredients: [String]) -> Pizza {
return Pizza(ingredients: ingredients)
}
func makeMargherita() -> Pizza {
return makePizza(ingredients:["tomato", "basil", "mozzarella"])
}
}
let lombardis1: Pizzeria = Lombardis()
let lombardis2: Lombardis = Lombardis()
print(lombardis1.makeMargherita())
print(lombardis2.makeMargherita())
为什么只有lombardis2与罗勒做披萨?我不明白为什么Lombardis1使用扩展中描述的方法,但l2却没有?
感谢。