Swift 使用 ObjectMapper

Swift using ObjectMapper

我正在从服务器解析 json。我在 json 中得到 4 个值,所以我创建了模型 class

class PriceData: Mappable {
var buy: Double?
var sell: Double?
var spot_price: NSNumber?
var timestamp: String?
var timesStampDt: Date?

required init?(map: Map) {
    //
}

func mapping(map: Map) {
    buy <- map["buy"]
    sell <- map["sell"]
    spot_price <- map["spot_price"]
    timestamp <- map["timestamp"]
    print(String(describing: GlobalMethods.dateFormat(dt: timestamp!)))
    timesStampDt <- map[String(describing: GlobalMethods.dateFormat(dt:            
 timestamp!))]
}
}

我正在获取字符串类型的时间戳,但我需要在解析时转换为日期,所以我使用此方法将时间戳转换为日期,

   static func dateFormat(dt: String) -> Date{
    let formatter = Foundation.DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let date1  = formatter.date(from: dt)
    print("date:\(String(describing: date1))")
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let resultTime = formatter.date(from: dt)
    return resultTime!
}

但是我在映射函数中将转换后的日期传递给 "timesStampDt" timesStampDt 的值为 nil。

您可能想使用对象映射器的 Transform 方法。检查 DateTransform class 并按如下方式使用它。

timesStampDt <- (map["timestamp"], DateTransform())

Tis 会将您的时间戳转换为日期。可以进一步研究transformclass,自己做任何Object Transform,非常灵活

为什么不简单地让 JSONDecoder 处理日期解析?您可以在解码器上设置 your format 以配置获取日期的格式,以便解码器知道如何解码它。

使用 JSONDecoderCodable 使解析代码更清晰。

Here 是 Codable 教程供您阅读。