我有这样的协议
public protocol IRouter: Requestable, MultipartUploading, Encoder {
}
其中 IRouter 应该继承或符合 Requestable 和 Encoder 协议
public protocol Requestable {
func asURLRequest() throws -> URLRequest
}
MultipartUploading 是另一个具有默认实现的协议
public protocol MultipartUploading {
func multipartFormData() throws -> Data?
}
public extension MultipartUploading {
func multipartFormData() throws -> Data? { return nil }
}
然后我将默认实现添加到 Requestable 如果它也是 IRouter
public extension Requestable where Self: IRouter {
func asURLRequest() throws -> URLRequest {
// make url request
}
}
以及 MultipartUploading 协议的另一种实现
public extension MultipartUploading where Self: IRouter {
func multipartFormData() -> Data? {
// make data to upload
}
}
但是如果我将模块导入应用程序目标并执行
enum Router: IRouter { }
它不包含这个 multipartFormData 和 asUrlRequest 实现,让我再次实现它们?如何避免这种情况并具有此默认实现。似乎如果我在同一个模块(目标)中执行此操作,那么 Router: IRouter 不会抱怨,但也许只是 Xcode 没有检测到错误