0

我正在迁移一种使用 Alamofire 的旧方法,其中具有如下功能:

protocol httpRequestSwiftDelegate {
    func httpRequestSwiftError(_ error: NSError, tag: Int)
    func httpRequestSwiftResponse(_ response: JSON, tag: Int)
}

class httpRequestSwift {
    func requestURL(method: HTTPMethod, url : String, params: [String: String], tag: Int)
}

然后我会将响应或错误委托给调用它的控制器。

现在我想使用 Alamofire 5,并利用可解码和可编码功能,我在定义参数时遇到了问题。

在我看来,它应该是这样的:

func requestURL(method: HTTPMethod, url : String, params: Encodable, decodable: Decodable, tag: Int)  {
    session.request(keychain.string(forKey: K.Api.baseUrl)! + url, method: method, parameters: params)
}

但我收到一个错误:

协议类型“Encodable”的值不能符合“Encodable”;只有结构/枚举/类类型可以符合协议

谢谢。

4

1 回答 1

0

是的,Encodable必须用作泛型参数,不能用作存在量。代替

func requestURL(method: HTTPMethod, url : String, params: Encodable, decodable: Decodable, tag: Int)

你需要类似的东西

func requestURL<Parameters, Response>(method: HTTPMethod, url : String, params: Parameters, decodable: Response, tag: Int) 
    where Parameters: Encodable, Response: Decodable
于 2020-05-26T22:58:04.923 回答