重新符合的协议/符合多次/覆盖相关联的类型

问题描述:

给出下面的协议与相关联的类型:重新符合的协议/符合多次/覆盖相关联的类型

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将符合协议两次,即使没有子类化也是不可能的。

我可以想到这种功能可能有用的场景。有什么理由不应该这样做?

编辑:

什么我问的是,如果有任何办法有AP<T>BP<U>即使BA一个子类,即覆盖相关的类型。

+1

子类继承已经通过该协议,因此没有必要再做一遍 –

+1

@and为什么它,因为命名冲突如果你覆盖的方法或变量的.. –

你的子类已经从它的父类中继承了该协议,所以不需要在子类中重写协议的一致性。

原因:

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 Bprotocol P你应该实现的属性和methods.In正常情况后,编译器会警告你添加 所需的方法和属性..

但如果发生在这种情况下,将会有与被覆盖的名称冲突。所以这不应该发生。所以你会得到编译器错误,因为

重新符合协议

+0

是的,但我要问的是,即使“B”是“A”的一个子类,是否有任何方法可以使'A'成为'P'和'B''P '。 –

+0

我不认为有一种方法,因为你不能使用覆盖的关键字在基类内使用协议方法。你的'func f(t:Int)'是B类自己的方法,而不是来自A类或协议P –