大家好,我需要调用一个函数,该函数接受以下参数:
let params = [
"inputParameters" : ["A2":"a1","B1":"b1","C1":"c1","D1":"d1"]
]
所以我为它创建了下面的可编码结构体
struct Parameters2 : Encodable{
let inputparameters = inputParameters(A1: "", B1: "", C1: "", D1: "")
}
struct inputParameters: Encodable {
let A1: String
let B1: String
let C1: String
let D1: String
}
但是当我打电话
guard let params = Parameters2(inputParameters(A1:"something", B1:"something", C1:"something", D1:"something"))
else{
return
}
我得到一个错误“Argument passed to call that takes no arguments”,即使我在结构中明确定义了输入参数。有人能找出可能出错的地方吗?
编辑:根据@vadian的建议,我添加了插入此参数的函数:
func executePost(parameters: Parameters2, completion: @escaping (Any?, Error?) -> Void) {
AF.request("myURL",
method: .post,
parameters: parameters,
encoder: JSONParameterEncoder.default, headers: headers).response { response in
debug print(response)
if let error = response.error {
completion(nil, error)
}
else if let jsonArray = response.value as? Any{
completion(jsonArray, nil)
}
else if let jsonDict = response.value as? Any{
completion([jsonDict], nil )
}
}}
我调用这个函数如下:
executePost(parameters: JSONEncoder().encode(params)) { (json, error) in <-- error Cannot convert value of type 'Data' to expected argument type '[String : InputParameters]'
if let error = error{
print(error.localizedDescription)
}
else if let json = json {
print(json)
}
}
1条答案
按热度按时间sd2nnvve1#
您的代码不起作用有以下几个原因:
inputParameters
(字典键)与inputparameters
(结构成员)不匹配。Parameters2
中分配了默认值。guard let
需要一个可选的,但没有。更简单的方法是使用一个结构
和文字字典键
并编码
params