我发现here协议中可以使用函数重写。显然,它可以覆盖签名,而不是实现。因此,如果它不是阴影,则仅对协变/逆变有意义。我尝试测试它,但我的检查失败了。
class Egg { }
class EasterEgg : Egg { }
protocol EggTray {
func get_1() -> Egg;
func get_2() -> Egg;
func get_3() -> Egg;
func get_4() -> Egg;
}
protocol EasterEggTray : EggTray {
override func get_1() -> EasterEgg;
override func get_2() -> EasterEgg;
override func get_3() -> EasterEgg;
override func get_4() -> EasterEgg;
}
错误消息表明支持“覆盖”,但编译器无法匹配两个函数(它忽略协方差)。
错误:方法不会覆盖其父协议中的任何方法
覆盖 func get_1() -> EasterEgg;
注意:此处可能被重写实例方法“get_1()”
func get_1() -> 鸡蛋;
协方差返回类型适用于类,但对于协议来说,它是不可编译的。 Swift 支持协议中的协方差返回类型吗?如果是 - Swift 期望它如何用代码编写? (我知道如何使用关联的类型来做到这一点,但这不是我正在寻找的。)如果不是 - 为什么不呢? Swift 不支持的原因是什么?协议中使用“override”关键字的原因是什么?