如何在 Swift 4 编码中存储大整数?



我正在尝试使用 swift 4 可编码的 API 自动解析。API 中的一些字段是大整数,Codable 不支持,Codable 不支持 Swift 4.NSNumber,UInt64 很小,不适合它。我尝试使用一个第三方库,并将我的变量在可编码为该类型,但这也不起作用。我试图创建一个自定义类或结构,它将在容器中仅使用一个值进行转换,但不知道如何使容器接受 Big Int 类型或将其转换为字符串。 我的代码如下所示。有什么解决方案吗?

import Foundation
import BigNumber
class PersonalizationLean:Codable {
var hubId:String?
var appId:UInt8?
var nodeId:Int?
var name:String?
var ico:String?
var icoBase64:String?
var isBin:Bool?
var lastModifiedAt:Int?
var shouldShowInUi:Bool?
var applianceType:String?
var tags:[String]?
var placeId:PlaceIdCodable?
var roomId:String?
var id:String?
var key:String?

enum CodingKeys:String,CodingKey {
case hubId
case appId
case nodeId
case name
case ico
case icoBase64
case isBin
case lastModifiedAt
case shouldShowInUi
case applianceType
case tags
case placeId
case roomId
case id
case key
}
//    required init(from decoder: Decoder) throws {
//        do {
//            let container = try decoder.container(keyedBy: CodingKeys.self)
//            self.hubId = try container.decode(String.self, forKey: .hubId)
//            self.appId = try container.decode(UInt8.self, forKey: .appId)
//            self.nodeId = try container.decode(Int.self, forKey: .nodeId)
//            self.name = try container.decode(String.self, forKey: .name)
//            self.ico = try container.decode(String.self, forKey: .ico)
//            self.icoBase64 = try container.decode(String.self, forKey: .icoBase64)
//            self.isBin = try container.decode(Bool.self, forKey: .isBin)
//            self.lastModifiedAt = try container.decode(Int.self, forKey: .lastModifiedAt)
//            self.shouldShowInUi = try container.decode(Bool.self, forKey: .shouldShowInUi)
//            self.applianceType = try container.decode(String.self,forKey: .applianceType)
//            self.tags = try container.decode([String].self,forKey: .tags)
//
//
//        }catch {
//            print(error)
//        }
//    }
}
class PlaceIdCodable:Codable {
var placeId:String?
required init(from decoder:Decoder) throws {
do  {
let container = try decoder.singleValueContainer()
let placeIdBig = try container.decode(BInt.self) //this gives error
}catch {
print(error)
}
}
}

我正在使用的库是 BigNumber

使用源自 NSDecimalNumber 的内置 Decimal 。它采用Codable

BInt

不符合CodableDecodable

要在此处使用它,它应该确认提到的协议

extension BInt: Decodable {
public init(from decoder: Decoder) throws {
// Initialization goes here
}
}

相关内容

  • 没有找到相关文章

最新更新