【问题标题】:Swift using ObjectMapperSwift 使用 ObjectMapper
【发布时间】:2019-01-18 17:54:40
【问题描述】:

我正在从服务器解析 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!))]
}
}

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

   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.

【问题讨论】:

  • 在 Swift 4 中,ObjectMapper 已经过时,取而代之的是 Codable

标签: swift objectmapper


【解决方案1】:

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

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

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

【讨论】:

  • 这是我在映射时更改的内容 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" if let dateString = map["timestamp "].currentValue 为?字符串,让 _date = dateFormatter.date(from: dateString) { timesStampDt = _date as NSDate }
【解决方案2】:

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

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

Here 是供您阅读的 Codable 教程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多