Swift不会在关联类型的协议扩展功能中调用重写的类var

时间:2018-12-07 21:17:39

标签: swift swift-protocols

这是我尝试尽量减少的代码:

protocol LengthValidater {
    static var minLength: Int { get }
}

protocol Validater: LengthValidater {
    associatedtype ValidateType

    static func generateValue() -> ValidateType
}

extension Validater {
    static func generate() {
        print(Self.minLength) // prints correctly
        generateValue()
    }
}

protocol TextValidateable: Validater where ValidateType == String {}

extension TextValidateable {

    static func generateValue() -> String {
        print(Self.minLength)
        return ""
    }

}

class TextValidater: TextValidateable {
    class var minLength: Int {
        fatalError()
    }
}

class UserIdentifier: TextValidater {
    override class var minLength: Int {
        return 10
    }
}

调用UserIdentifier.generate()会使应用程序崩溃,但显然不应该这样做,因为它应该使用动态调度并调用覆盖的class var当我删除关联的类型和/或返回类型的generateValue()时,它不会崩溃。

为什么会崩溃?

0 个答案:

没有答案