【问题标题】:JSONEncoder doesnt work integer values below IOS 13-JSONEncoder 不适用于 IOS 13 以下的整数值-
【发布时间】:2021-06-09 10:07:30
【问题描述】:

我正在尝试使用 body 向 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))
这里有什么问题?任何建议都可以。谢谢

【问题讨论】:

  • 不要打印error.localizedDescription,打印error
  • 更新@vadian

标签: ios json swift encoding


【解决方案1】:

JSON 编码毫无意义。在实践中,您要将Int 转换为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之前的片段编码。

【讨论】:

  • 谢谢。 JSONEncoder 在您对 IOS 13.0 以下的模型进行编码时有效,但是当我尝试像我一样对 Int 进行编码时,它不起作用。
猜你喜欢
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
相关资源
最近更新 更多