json 传递给调用的参数不接受结构中的结构的参数错误

3pmvbmvn  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(112)

大家好,我需要调用一个函数,该函数接受以下参数:

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)
                   
                }
            }
sd2nnvve

sd2nnvve1#

您的代码不起作用有以下几个原因:

  • inputParameters(字典键)与inputparameters(结构成员)不匹配。
  • 出现上述错误是因为您在Parameters2中分配了默认值。
  • guard let需要一个可选的,但没有。

更简单的方法是使用一个结构

struct InputParameters: Encodable {
      let A1, B1, C1, D1: String
}

和文字字典键

let params = ["inputParameters": InputParameters(A1:"something", B1:"something", C1:"something", D1:"something")]

并编码params

相关问题