Допустим, я имею дело с библиотекой, которую не контролирую, и пытаюсь обернуть класс, определяющий тип обратного вызова, чтобы отделить мой код для целей тестирования. Вот класс внутри модуля 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 {}
Я получаю Тип «Приложение» не соответствует протоколу «ApplicationProtocol». Если я изменю UIElementProtocol
внутри обратного вызова ApplicationProtocol на UIElement
, это сработает. Но UIElement
соответствует UIElementProtocol
, так почему же это не работает?
Второй вопрос: есть ли лучший способ спроектировать API библиотеки, чтобы учесть такие вещи?