次のようなクラスメソッドを持つ既存のクラスの拡張機能を使用しようとしています:
@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 は「コマンド /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1」と表示します。プロトコルで「オプション」を使用しない場合、拡張機能で foo() をアンラップする必要はなく、「セルフ」を削除してもすべてが正常に機能します。オプションを適切に機能させる理由と方法を誰か教えてもらえますか? 前もって感謝します。