0

私が制御していないライブラリを扱っていて、コールバック型を定義するクラスをラップして、テスト目的でコードを分離しようとしているとしましょう。module 内のクラスは次のAXSwiftとおりです。

public class Application {
  public typealias Callback = (element: UIElement) -> ()
  public func createObserver(callback: Callback) -> Observer? {
    // ...
  }
}

テスト用のラッパー プロトコルは次のとおりです。

protocol UIElementProtocol {}
extension AXSwift.UIElement: UIElementProtocol {}

protocol ApplicationProtocol {
  func createObserver(callback: (element: UIElementProtocol) -> ()) -> Observer?
}
extension AXSwift.Application: ApplicationProtocol {}

タイプ 'Application'がプロトコル 'ApplicationProtocol' に準拠していませんUIElementProtocolApplicationProtocol コールバック内を に戻すと、UIElement機能します。しかし、にUIElement準拠してUIElementProtocolいるのに、なぜこれが機能しないのですか?

2 番目の質問: ライブラリ API を設計して、この種のことを可能にするより良い方法はありますか?

4

1 に答える 1