【发布时间】:2019-03-04 05:53:10
【问题描述】:
我知道这个问题已经被问过很多次了,但是我很难理解这如何归因于我的场景。
我希望有人可以为我解决这个问题,以便我了解问题以及如何解决。
我有一个协议
protocol HTTPClientProtocol: class {
associatedtype T: EndpointProtocol
associatedtype U: Codable
var task: URLSessionDataTask { get set }
var session: SessionProtocol { get }
var request: URLRequest? { get }
func call(method: HTTPMethod, endpoint: T, urlParams: [String: String], bodyParams: [String: String], queryParams: [String: String]) -> Promise<U>
.......
}
还有一个我使用的类
class HTTPClient<T: EndpointProtocol, U: Codable>: HTTPClientProtocol {
var task: URLSessionDataTask = URLSessionDataTask()
var session: SessionProtocol = URLSession.shared
var request: URLRequest?
func call(method: HTTPMethod, endpoint: T, urlParams: [String: String], bodyParams: [String: String], queryParams: [String: String]) -> Promise<U> {
return Promise<U> { seal in
request = try? createRequest(
service: endpoint.service,
path: createRoute(path: endpoint.path, urlParams: urlParams),
bodyParams: bodyParams,
queryParams: queryParams,
isFastPatch: method == .JSONPATCH
)
.......
}
我正在尝试如下实例化它
struct RecognitionService: RecognitionServiceProtocol {
lazy var httpClient: HTTPClientProtocol = HTTPClient<FeedsEndpoint, Recognition>()
}
但我得到了错误
Protocol 'HTTPClientProtocol' 只能用作通用约束 因为它有 Self 或关联的类型要求
是使call func 泛型而不是类的唯一解决方案吗?
我不确定如何解决此问题。
【问题讨论】:
标签: ios swift generics swift-protocols