首页 > 解决方案 > 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))
这里有什么问题?任何建议都可以。谢谢

标签: iosjsonswiftencoding

解决方案


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 之前对片段进行编码。


推荐阅读