0
假设我正在处理一个我不控制的库,并且我试图包装一个类,该类定义了一个回调类型来解耦我的代码以用于测试目的。这里的类,内部模块AXSwift
:用Swift协议包装回调类型
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
更改回UIElement
,它就可以工作。但UIElement
符合UIElementProtocol
,那么为什么不工作?
第二个问题:是否有更好的方法来设计库API来支持这种事情?