Alamofire 5词典中的任何内容

问题描述 投票:0回答:2

我正在尝试使用Alamofire 5发出发布请求。我必须使用Dictionary<String, Any>作为参数。因为我正在为Alamofire写包装纸。但是似乎我无法在字典中使用任何对象,因为Alamofire给了我一个编译器错误:

Value of protocol type 'Any' cannot conform to 'Encodable'; only struct/enum/class types can conform to protocols

我尝试过的:

    let encodedParameters = Dictionary<String, Any>

    AF.request(url, method: .get, parameters: encodedParameters, headers: headers)

在我的字典中,某些值将是字符串,其他值将是整数。所以我不能使用常量类型。我该如何解决这个问题?

ios swift alamofire
2个回答
0
投票
// you might have... struct FooRequestParameters : Codable { let paramName1: Int let paramName2: String } // for another type of request, you might have different parameters... struct BarRequestParameters: Codable { let somethingElse: Bool }

并且您可以传递FooRequestParameters(paramName1: 1, paramName1: "hello")而不是字典。这与通过字典相同:

[
    "paramName1": 1,
    "paramName2": "hello"
]

此API更改的基本原理可能具有更高的安全性。使用[String: Any],您可以很容易地为应该为String的参数提供Int值,或者错误输入了参数名称,或者错过了一些参数而没有意识到...等等。


0
投票
AF.request(url, method: .get, parameters: encodedParameters, encoding: JSONEncoding.default, headers: headers)

更新:如果您想使用最新的Alamofire 5语法,请创建一个结构并将其确认为可编码。然后使用值创建具有相同结构的对象并将其传递。

© www.soinside.com 2019 - 2024. All rights reserved.