问题描述
请帮忙解释为什么路由器没有 responseDecodable。我为 AF 请求调用制作了一个路由器,其中一个端点需要发送 String: [String: Any]
。我不确定我做错了什么。谢谢!
AFRouter
enum AFRouter: URLRequestConvertible {
case test([String: [String: Any]])
var base: URL {
return URL(string: "https://example.com")!
}
var method: HTTPMethod {
switch self {
case .test:
return .get
}
var path: String {
switch self {
case .test(_):
return "/v2/test"
}
}
func asURLRequest() throws -> URLRequest {
let urlString = baseURL.appendingPathComponent(path).absoluteString.removingPercentEncoding!
let removeSpace = urlString.replacingOccurrences(of: " ",with: "")
let url = URL(string: removeSpace)
var request = URLRequest(url: url!)
request.method = method
switch self {
case .test(_):
guard let token = defaults.string(forKey: "token") else {
return request
}
request.setValue("Bearer " + token,forHTTPHeaderField: "Authorization")
request = try JSONEncoding.default.encode(request)
return request
}
}
可编码
struct Test: Codable {
let success: String
let message: String
let data: [String]
}
调用 API
func getTest(testInfo: [String: Any]) {
AF.request(AFRouter.test(["Testing": testInfo]).responseDecodable(of: Test.self) { response in //got error here "Value of type 'AFRouter' has no member 'responseDecodable'"
//do something...
})
}
解决方法
错误表明您想在 responseDecodable(of:)
实例上使用 AFRouter
。
但实际上,您希望在 DataRequest
实例上使用它。
但它“应该有效”,所以你是在错误的实例上调用它吗?如果我们观察到,有一个缺失的 )
:
AF.request(AFRouter.test(["Testing": testInfo]).responseDecodable(of:...
=>
AF.request(AFRouter.test(["Testing": testInfo])).responseDecodable(of:...