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

时间:2016-11-15 11:26:03

标签: swift

给定以下具有关联类型的协议:

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>的子类,也有B P<U>BA的方法positionPerFrame,即覆盖关联的类型。

1 个答案:

答案 0 :(得分:0)

您的子类已经从其超类继承了协议的采用,因此不需要在子类中覆盖协议的一致性。

原因:

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之后,您应该实现属性和方法。在正常情况下,编译器会警告您添加  所需的方法和属性..

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

  

重新符合协议