gpt4 book ai didi

ios - Swift 协议(protocol)和扩展,我需要根据需要调用覆盖方法或默认扩展方法

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:08 25 4
gpt4 key购买 nike

我有一个协议(protocol) Vehicle 及其扩展如下:

protocol Vehicle {
func Drive()
}

extension Vehicle {
func Stop() {
print("iiiich...")
}
}

我也有像下面这样的停止方法声明

struct Car: Vehicle {
func Drive() {
print("Can Drive")
}
func Stop() {
print("yo stop")
}
}

let myCar = Car()
myCar.Drive()
myCar.Stop()

但是它覆盖了停止方法

// Output
// Can Drive
// yo stop

根据我的要求,我有时需要默认方法,有时需要重写方法定义

最佳答案

嘿,我得到的答案是通过对象调用你的默认方法而不是覆盖来符合协议(protocol),所以我们可以根据需要调用这两个定义

let honda: Vehicle = Car()
honda.Drive()
honda.Stop()
// Output
// Can Drive
// iiiich..

当我们创建一个没有类型的变量时,当对象仅符合协议(protocol)时,这就是静态分派(dispatch)。

关于ios - Swift 协议(protocol)和扩展,我需要根据需要调用覆盖方法或默认扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51721290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com