使用ObjectMapper的Swift

时间:2018-08-11 08:38:34

标签: swift objectmapper

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

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!))]
}
}

我将时间戳记作为字符串类型,但是在解析时我需要隐蔽地转换为日期,因此我使用此方法和

将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。enter image description here

2 个答案:

答案 0 :(得分:0)

您可能要使用对象映射器中的Transform方法。检查DateTransform类并按如下所示使用它。

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

Tis会将您的时间戳记转换为Date。您可以进一步学习转换类并自己进行任何对象转换,这非常灵活

答案 1 :(得分:0)

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

使用JSONDecoderCodable进行操作使解析代码更加简洁。

Here是可编码的教程,供您阅读。