首页 > 解决方案 > 可编码的计算变量类型 - 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 结构。我一直在寻找使用泛型,但我不知道如何在计算变量中使用。我已阅读答案,但对我没有帮助。

标签: iosswiftalamofire

解决方案


推荐阅读