我为一个快速的药物提醒项目以及离线和在线工作的应用程序工作,因此用户可以保存很多提醒,一旦互联网可用,我需要将对象数组发送到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()
}
}
但是我收到一个错误,说“调用中的额外参数'方法”。 所以,如果有人有想法处理这种情况,请与我分享
由于
答案 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}}。