首页 > 解决方案 > 在alamofire中发送数组数组

问题描述

我为一个快速的药物提醒项目工作,该应用程序可以离线和在线工作,因此用户可以保存很多提醒,一旦互联网可用,我需要将对象数组发送到 API。我正在使用 Alamofire 4.4,这是我获取参数并将其放入数组的代码

var medArrTosendToServer =  [(_id:String, _timing:String)]()

    func getParameters() -> [[String: AnyObject]] {
    var result = [[String: AnyObject]]()

    for med in medArrTosendToServer {
        let medRes: [String: AnyObject] = [
            "device_id": DEVICE_ID as AnyObject,
            "userProfileID": userProfileID as AnyObject,
            "medName": med._medName as AnyObject,
            "timing": med._timing as AnyObject

        ]
        result.append(medRes)
    }
    print(result)
    return result
}

并在sned到服务器功能

    func sendDataToServer() {

        let param  = getParameters()

        Alamofire.request(URL_POST_UserProfile, method: .post, parameters: param )

            .responseJSON

            { response in

                switch response.result {

                case .success( _):

                    if let JSON = response.result.value{

// here if success

                    }

                case .failure(let error):

                    print(error)

                   // self.stopAnimating()

                }

        }   

    }else{

        //self.stopAnimating()

    }

}

但我收到一条错误消息,显示“调用中的额外参数'方法'”。所以如果有人有处理这个案子的想法,请与我分享

谢谢

标签: swiftalamofire

解决方案


正如您所Alamofire parameters期望的那样,[String: Any]您需要创建一个URLRequest并添加您的Arrayin 正文,如下所示:

func uploadDataToServer(dataToUpload: [[String: Any]], completionHandler:@escaping (Bool) -> ()){

    let urlString            = "Your url string"
    guard let url = URL(string: urlString) else {
        return
    }
    var request        = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    do {
        request.httpBody   = try JSONSerialization.data(withJSONObject: dataToUpload)
    } catch let error {
        print(error)
    }


    Alamofire.request(request).responseJSON{ (response) in

        print("Success: \(response)")
        switch response.result{
        case .success:
            if let statusCode: Int = response.response?.statusCode {
                switch statusCode{
                case 200:
                    completionHandler(true)
                    break
                default:
                    completionHandler(false)
                    break
                }
                break
            }
        case .failure:
            completionHandler(false)
            break
        }
    }
}

也是[String: Any]更好的选择,因为它可以存储价值,Any-TypeAnyObject只需要Object-Type. 也不[[String: AnyObject]]ArrayArray,是ArrayDictionaries


推荐阅读