重新符合的协议/符合多次/覆盖相关联的类型
给出下面的协议与相关联的类型:重新符合的协议/符合多次/覆盖相关联的类型
protocol P {
associatedtype T
func f(t: T)
}
和类A
符合协议P
:
class A: P {
func f(t: String) {
print(t)
}
}
有没有办法在子类“B”中覆盖符合'P'的符合性,以便我们可以更改关联的类型'T'?
class B: A, P { // Redundant conformance of 'B' to protocol 'P'
func f(t: Int) {
super.f("Hello")
print(2 * t)
}
}
编写用于B
符合P
是多余的,给出了一个错误。 B将符合协议两次,即使没有子类化也是不可能的。
我可以想到这种功能可能有用的场景。有什么理由不应该这样做?
编辑:
什么我问的是,如果有任何办法有A
是P<T>
和B
是P<U>
即使B
是A
一个子类,即覆盖相关的类型。
你的子类已经从它的父类中继承了该协议,所以不需要在子类中重写协议的一致性。
原因:
protocol P {
var name:String{get set}
}
class A:P {
var name:String = "Swift"
}
class B:A {
override var name:String{
get{
return "Hello"
}set{
}
}
}
符合class B
到protocol P
你应该实现的属性和methods.In正常情况后,编译器会警告你添加 所需的方法和属性..
但如果发生在这种情况下,将会有与被覆盖的名称冲突。所以这不应该发生。所以你会得到编译器错误,因为
重新符合协议
是的,但我要问的是,即使“B”是“A”的一个子类,是否有任何方法可以使'A'成为'P'和'B''P '。 –
我不认为有一种方法,因为你不能使用覆盖的关键字在基类内使用协议方法。你的'func f(t:Int)'是B类自己的方法,而不是来自A类或协议P –
子类继承已经通过该协议,因此没有必要再做一遍 –
@and为什么它,因为命名冲突如果你覆盖的方法或变量的.. –