这是我尝试尽量减少的代码:
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()
时,它不会崩溃。
为什么会崩溃?