ios - JSONEncoder 不适用于 IOS 13 以下的整数值-
问题描述
我正在尝试使用正文向 WebService 发送一个整数值,所以我创建了一个这样的函数:
static func GetRoomVersionAndRemainingSeconds(auctionId:Int,completed:@escaping (ServiceResultDene<String>)->()){
var memberJson : String = ""
do{
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(auctionId)
memberJson = String(data: jsonData, encoding: String.Encoding.utf8)!
}catch{
print(error)
}
var request = URLRequest(url: URL(string: WebServiceUrls.GetRoomVersionAndRemainingSeconds)!)
request.httpMethod = HTTPMethod.post.rawValue
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue(Util.cookie, forHTTPHeaderField: "Cookie")
request.httpBody = (memberJson).data(using: .unicode)
Alamofire.request(request).responseJSON{response in
....
}
当我尝试上面的代码时,它完美地编码整数值IOS 13+
-memberJson is = "\"4\""
但是当我尝试这个时IOS 12.4
它没有编码并error.localizedDescription
返回:invalidValue(4, Swift.EncodingError.Context(codingPath: [], debugDescription: "Top-level Int encoded as number JSON fragment.", underlyingError: nil))
这里有什么问题?任何建议都可以。谢谢
解决方案
JSON 编码毫无意义。在实践中,您要将 a 转换Int
为 a String
。
这可以更简单地完成
static func GetRoomVersionAndRemainingSeconds(auctionId: Int,completed: @escaping (ServiceResultDene<String>)->()){
var request = URLRequest(url: URL(string: WebServiceUrls.GetRoomVersionAndRemainingSeconds)!)
request.httpMethod = HTTPMethod.post.rawValue
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue(Util.cookie, forHTTPHeaderField: "Cookie")
request.httpBody = Data(String(auctionId).utf8)
Alamofire.request(request).responseJSON{response in
....
}
顺便说一句,错误的原因是JSONEncoder
不支持在 iOS 13 之前对片段进行编码。
推荐阅读
- python - 如何在 python 安装包中包含文本文件?
- drop-down-menu - 响应式 Bootstrap 4 导航栏下拉项目显示为导航项目
- python - 在函数内部使用函数,输入发生两次,一次是需要的
- c++ - C++ 使用成员对象的 Setter
- java - 无法在 JPA 查询中应用 where 条件子句
- javascript - JavaScript - 在不同时间触发多个事件的最佳方法
- python - 已定义“名称未定义”时出现错误
- spring-kafka - 通过外部触发器寻找偏移量
- javascript - 使用分隔符 jquery 将输入字段值自动写入文本区域
- r - R - 修改一个未知函数