【发布时间】:2020-07-09 14:05:45
【问题描述】:
我有这样的协议
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 }
}
如果它也是 IRouter,我将默认实现添加到 Requestable
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 没有检测到错误
【问题讨论】: