在alamofire中发送阵列数组

时间:2018-06-05 13:19:59

标签: swift 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 to server function

    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()

    }

}

但是我收到一个错误,说“调用中的额外参数'方法”。 所以,如果有人有想法处理这种情况,请与我分享

由于

1 个答案:

答案 0 :(得分:0)

由于Alamofire parameters需要[String: Any]类型,您需要创建一个URLRequest并在您的身体中添加Array,如下所示:

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-Type的值,但AnyObject只会Object-Type。另外,[[String: AnyObject]]不是Array的{​​{1}},而是Array的{​​{1}}。