Swift bug?当具有泛型类型的子类时调用超类方法

时间:2014-11-26 08:06:07

标签: swift

不确定这是否是我的快速问题。但我已经提交了一个错误。 请看附件,最后一行显示' hola',但它显示' hello'。

enter image description here

它阻止我的项目,无论如何走动?感谢。

//游乐场 - 名词:人们可以玩的地方

import UIKit

protocol Hello {
    class func hello() -> String
}

class HelloEnglish: Hello {
    class func hello() -> String {
        return "hello"
    }
}

class HelloSpanish<E>: HelloEnglish {
    override class func hello() -> String {
        return "hola"
    }
}

typealias HelloSpanishClass = HelloSpanish<AnyObject>

println("expect: hello")
HelloEnglish.hello()
println("expect: hola")
HelloSpanishClass.hello()

func sayHello<T: Hello>(type: T.Type) -> String {
    return type.hello()
}

println("expect: hello")
sayHello(HelloEnglish.self)
println("expect: hola")
sayHello(HelloSpanishClass.self)

1 个答案:

答案 0 :(得分:1)

这适用于Xcode 6.1.1(6A2006)

enter image description here

在6.1.1的发行说明中,Apple提到此错误已修复:

  

满足协议要求的类方法和初始化程序现在可以在通用上下文中调用时正确调用子类覆盖。 (18828217)例如:

protocol P {
   class func foo()
 }
 class C: P {
   class func foo() { println("C!") }
 }
 class D: C {
   override class func foo() { println("D!") }
 }
 func foo<T: P>(x: T) {
   x.dynamicType.foo()
 }
 foo(C()) // Prints "C!"
 foo(D()) // Used to incorrectly print "C!", now prints "D!"