Swift3 关于协议的swift扩展

Swift3 关于协议的swift扩展,swift3,protocols,extension-methods,Swift3,Protocols,Extension Methods,如何理解下面的代码,当我注释比萨店协议的“func makemargerita()”时,结果是 ["tomato", "mozzarel"] ["tomato", "basil", "mozzarel"] 但是当func makemargerita()工作时,它将打印: ["tomato", "basil", "mozzarel"] ["tomato", "basil", "mozzarel"] 如何理解这个代码 protocol Pizzeria{ func makePizza(ing

如何理解下面的代码,当我注释比萨店协议的“
func makemargerita()
”时,结果是

["tomato", "mozzarel"]
["tomato", "basil", "mozzarel"]
但是当
func makemargerita()
工作时,它将打印:

["tomato", "basil", "mozzarel"]
["tomato", "basil", "mozzarel"]
如何理解这个代码

protocol Pizzeria{
  func makePizza(ingredients: [String])
    //func makeMargherita()
}

extension Pizzeria{
func makeMargherita() {
    return makePizza(ingredients: ["tomato", "mozzarel"])
 }
}

struct Lombardis: Pizzeria{

func makePizza(ingredients: [String]) {
    print(ingredients)
  }
func makeMargherita() {
    return makePizza(ingredients: ["tomato", "basil", "mozzarel"])
  }
}

let lombardis1: Pizzeria = Lombardis()
let lombardis2: Lombardis = Lombardis()
lombardis1.makeMargherita()
lombardis2.makeMargherita()

那么问题出在哪里呢?请参阅–在协议中定义需求允许动态调度。@Hamish谢谢。这是一个非常有用的答案。那么问题是什么呢?请参阅–在协议中定义需求允许动态调度。@Hamish谢谢。这是一个非常有用的答案。