相关疑难解决方法(0)

Swift 2.0中的协议扩展方法调度

我正面临协议方法调度的问题.

我有一个类层次结构,看起来像这样:

protocol E {
    func test()
}

extension E {
    func test() {
        print("jello")
    }
}

class A: E {

}

class B: A {
    func test() {
        print("hello")
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我打电话给静态强制输入test类的实例时,"jello"被打印出来,而不是"你好".BA

let b: A = B()  // prints "jello" not "hello"
b.test()
Run Code Online (Sandbox Code Playgroud)

我的理解是test方法打印"jello"被"集成"到A(因为A符合E协议)的实例中.然后我提供另一个test内部实现B(继承表单A).我以为多态性会在这里工作,并呼吁testB实例存储内A引用将打印hello.这里发生了什么事?

不使用任何协议时,它完美地工作:

class A {
    func test() {
        print("jello")
    } …
Run Code Online (Sandbox Code Playgroud)

polymorphism xcode ios swift xcode7

6
推荐指数
1
解决办法
274
查看次数

标签 统计

ios ×1

polymorphism ×1

swift ×1

xcode ×1

xcode7 ×1