Это код, который я пытался свести к минимуму:
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()
, он не падает.
Почему происходит сбой?