Я пытаюсь с помощью расширения для существующего класса с методом класса, как:Как использовать протокол с дополнительными методами класса в расширении с общим в Swift?
@objc public protocol MyProtocol {
optional class func foo() -> Int
}
И я использую этот протокол в расширении с родовым, как:
extension MyClass {
public func bar<T: MyProtocol>() {
...
let x: Int = T.self.foo!() // if I do not use "self" or "!" here, I will have a compiler error
...
}
Это должно работать, но когда я строю он, Xcode говорит: «Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc не удалось с кодом выхода 1». Если я не использую «необязательный» в протоколе, мне не нужно разворачивать foo() в расширении, и все работает хорошо, даже если я удалю «я». Может ли кто-нибудь сказать мне, почему и как сделать дополнительную работу правильно? Спасибо заранее.
Практический код об этом намного сложнее. Именно так я оптимизирую дизайн использования Alamofire с маршрутизатором. Это нормально, чтобы не использовать необязательный (всего пару дополнительных строк), но проблема действительно смутила меня. Спасибо вам за разъяснение! – Wizard