Swift не вызывает переопределенный класс var в функции расширения протокола со связанным типом - PullRequest
0 голосов
/ 08 декабря 2018

Это код, который я пытался свести к минимуму:

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(), он не падает.

Почему происходит сбой?

...