【发布时间】:2018-06-16 15:42:48
【问题描述】:
我收到此错误,不知道如何解决。即使试图澄清泛型类型似乎也不起作用。任何解决方案都会有所帮助,因为 Swift 编译器确实没有给我太多帮助。
这是我的功能:
public func request<T: JSONEncodable, K: JSONDecodable>(_ url: URLConvertible, httpMethod: HTTPMethod, query: [URLQueryItem]? = nil, body: T? = nil, completion: @escaping (Result<K>) -> Void) {
do {
var urlRequest = try buildURLRequest(httpMethod: httpMethod, url: url, withBase: baseURL, query: query, body: body)
for middleware in requestMiddleware {
try middleware.run(request: &urlRequest)
}
session.dataTask(with: urlRequest, completionHandler: { (data, urlResponse, error) in
do {
var data = data
var urlResponse = urlResponse
var error = error
for middleware in self.responseMiddleware {
try middleware.run(data: &data, urlResponse: &urlResponse, error: &error)
}
if let error = error {
throw error
} else if let data = data {
completion(.success(urlResponse as! HTTPURLResponse, try self.jsonDecoder.decode(K.self, from: data)))
} else {
completion(.failure(HTTPClientError.nilResponseData))
}
} catch {
completion(.failure(error))
}
}).resume()
} catch {
completion(.failure(error))
}
}
结果枚举:
internal enum Result<T: JSONDecodable> {
case success(HTTPURLResponse, T)
case failure(Error)
}
我怎么称呼它:
httpClient.request("hi", httpMethod: .get, completion: { (result: Result<Model>) -> Void in
switch result {
case .success(httpURLResponse, value):
print("nice")
case .failure(error):
print("nice")
}
})
【问题讨论】:
-
为什么不用
Codable而不是T: JSONEncodable, K: JSONDecodable