ios - 可编码的计算变量类型 - Alamofire Swift
问题描述
我正在尝试在我的 iOS 应用程序中为 API 创建一个路由器(枚举)。
我有几个像这样的可编码结构:
struct APIAccountID: Encodable, Decodable {
let username: String
let password: String
}
在我的路由器中,对于每个请求,我计算了包含根据请求返回 baseURL、路径、方法和参数的开关的变量。除了参数变量之外,它们都可以工作。
这是我的路由器中的参数变量:
var parameters: Encodable? {
switch self {
case .fetchAccessToken(let accountID):
return accountID // Encodable struct AccountID
case .sendMessage(let message):
return message // Encodable struct Message
default:
break
}
return nil
}
URLRequestConvertible
在这个 Alamofire协议方法中使用了这些参数:
func asURLRequest() throws -> URLRequest {
let url = try baseURL.asURL().appendingPathComponent(path)
var request = URLRequest(url: url)
request.method = method
if method == .get {
request = try URLEncodedFormParameterEncoder()
.encode(parameters, into: request)
} else if method == .post {
request = try JSONParameterEncoder().encode(parameters, into: request)
request.setValue("application/json", forHTTPHeaderField: "Accept")
}
return request
}
我在上述方法中收到此错误:
协议“可编码”作为一种类型不能符合协议本身
我正在按照本指南创建 API 路由器。但他使用简单的字典作为参数。我希望能够使用我的 Encodable 结构。我一直在寻找使用泛型,但我不知道如何在计算变量中使用。我已阅读此答案,但对我没有帮助。
解决方案
推荐阅读
- reactjs - 有没有办法避免在 React 中有两个“根”元素?
- asp.net - 会话状态以秒为单位超时,而不是分钟
- python - 如何将一列拆分为多列?
- javascript - Javascript结合2个地图数组
- python - 这是python中矩阵计算的稳定性问题吗?
- sql - 根据其他列中的条件获取不同的值计数
- javascript - 当超链接行为是由例如 HTML 按钮的“单击”事件处理虚拟创建时,如何防止打开新选项卡或窗口?
- python - 更改安装在 python 虚拟环境中的库的所有权
- capacitor - 在电容器应用程序中打开 Web 应用程序
- c++ - 安装 curlpp 库