Ios 如何在Swift 4编码表中存储大整数?
我正在尝试使用swift 4 codable自动解析API。API中的某些字段是大整数,Codable不支持该字段,Swift 4也不支持该字段。Codable不支持NSNumber,UInt64很小,不适合该字段。我尝试使用第三方库,并将代码中的变量设置为该类型,但这也不起作用。我试图创建一个自定义类或结构,该类或结构只使用容器中的一个值进行转换,但不知道如何使容器接受大Int类型或将其转换为string。 我的代码如下所示。有什么解决办法吗Ios 如何在Swift 4编码表中存储大整数?,ios,swift,swift4,biginteger,codable,Ios,Swift,Swift4,Biginteger,Codable,我正在尝试使用swift 4 codable自动解析API。API中的某些字段是大整数,Codable不支持该字段,Swift 4也不支持该字段。Codable不支持NSNumber,UInt64很小,不适合该字段。我尝试使用第三方库,并将代码中的变量设置为该类型,但这也不起作用。我试图创建一个自定义类或结构,该类或结构只使用容器中的一个值进行转换,但不知道如何使容器接受大Int类型或将其转换为string。 我的代码如下所示。有什么解决办法吗 import Foundation import
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)
}
}
}
我正在使用的库是使用从中派生的内置库。它采用了
Codable
BInt
不符合Codable
或Decodable
在这里使用时,应确认上述协议
extension BInt: Decodable {
public init(from decoder: Decoder) throws {
// Initialization goes here
}
}
整数有多大?@MartinR的例子是2.7924224107526434141341370365e+28我给的是来自邮递员的。实际值为27592653341843742185735257620。我只是想证明,即使是Int64也无法处理它。