arrays - 在参数请求中传递字符串数组 - swift 5
问题描述
在参数请求中传递字符串数组 - swift 5. 我想从 alamofire 请求中发送一个参数数组。
这是对邮递员的要求:
这是我的解决方案:
var Token : String?
var tasksMO = [NSManagedObject]()
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "ConfirmActivationEntity")
do {
let results = try pe.context.fetch(request)
tasksMO = results as! [NSManagedObject]
for taskmo in tasksMO {
Token = (taskmo.value(forKey: "access_token") as! String )
}
print("assbil")
} catch {
print("fild")
}
print(" Token :\(Token!)")
let levels : [String] = ["+972569431827","+972598110437","+972592923343","3555656","00970567163651","258258"]
let paramsJSON = JSON(levels)
debugPrint(paramsJSON)
let parameters : [String : Any] = ["contacts":paramsJSON,"platform":2]
let headers : HTTPHeaders = ["Authorization":"Bearer \(Token!)","Accept-Language" : Locale.current.languageCode ?? "ar", "Content-Type" : "application/x-www-form-urlencoded","Accept" : "application/json"]
guard let url = URL(string: "\(UrlApi.url)\(UrlApi.contactsPost)") else { return }
sdLoader.startAnimating(atView: self.view)
Alamofire.request(url, method: .post, parameters: parameters, headers: headers).responseJSON { response in
if let error = response.error {
print(error)
return
}
if let status = response.response?.statusCode {
print(status)
print(response.result.value!)
switch(status){
case 200:
self.sdLoader.stopAnimation()
do{
let decoder = JSONDecoder()
let userResultDec = try decoder.decode(ContactsJSON.self, from: response.data!)
decoder.keyDecodingStrategy = .convertFromSnakeCase
if userResultDec.status == true {
print(userResultDec.items)
} else if userResultDec.status == false {
self.showAlert(title: "رسالة", message: "هناك خطا بالمعلومات المدخلة", style: .alert)
}
} catch let parsingError {
print("Error", parsingError)
MessageBox.Show(Message: " \(parsingError) , خطأ في السيرفير ", MyVC: self)
}
case 401 :
self.sdLoader.stopAnimation()
print("error with response status: \(status)")
print("خطأ في السيرفير")
MessageBox.Show(Message: "error with response status: \(status) , خطأ في السيرفير ", MyVC: self)
case 404 :
self.sdLoader.stopAnimation()
print("error with response status: \(status)")
print("خطأ في السيرفير")
MessageBox.Show(Message: "error with response status: \(status) , خطأ في السيرفير ", MyVC: self)
case 500:
MessageBox.Show(Message: "error with response status: \(status) , خطأ في السيرفير ", MyVC: self)
default:
print("Error")
}
}
}
问题是:数组中的项目没有出现在服务器的参考响应中
我在 iOS 13、Swift 5 和 Xcode 11 中使用 Alamofire pod 和 SwiftyJson pod。
解决方案
Alamofire/Swift 中的 application/x-www-form-urlencoded 对话有问题。它确实以邮递员的方式工作。Postman 会自动转换您的数组,但 swift 不会。
struct ArrayEncoding: ParameterEncoding {
func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
var request = try URLEncoding().encode(urlRequest, with: parameters)
request.url = URL(string: request.url!.absoluteString.replacingOccurrences(of: "%5B%5D=", with: "="))
return request
}
}
推荐阅读
- java - Java EventEmitter客户端重新连接不起作用
- php - 在 Woocommerce 中显示和设置含税和不含税的价格
- node-red - 在不同的 JSON 对象中合并超过 3 个 csv 文件 node-red
- javascript - 如何使 JavaScript 中添加的元素像 HTML 中添加的元素一样响应 onclick?
- java - 返回 MaterialTimePicker
- docker - 构建图像返回 SSL 连接无法建立,请参阅内部异常
- reactjs - 在生产模式下,反应头盔异步不起作用,反应头盔异步如何工作?
- cairo - 如何通过 Image Magick 在 Cairo Graphics 中包含图像?
- javascript - 如何通过单击按钮将特定字符输入到 TextField
- swift - Swift String 罕见崩溃