【发布时间】:2018-08-19 15:19:34
【问题描述】:
我的 json 中的日期参数可以为空(“”)。 JSONDecoder中如何处理?
自定义的dateDecodingStrategy只能处理不同的格式,不能处理空值。(formatter返回的日期不能是可选的)。
当日期有一个值时,它将完美地工作。但是当日期为“”时,它会崩溃。
decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
let container = try decoder.singleValueContainer()
let dateStr = try container.decode(String.self)
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "yyyy"
if let date = formatter.date(from: dateStr) {
return date
}
formatter.dateFormat = "yyyy-MM-dd"
if let date = formatter.date(from: dateStr) {
return date
}
throw DateError.invalidDate
})
【问题讨论】:
-
如果字符串为空,您希望返回什么日期?顺便怪 web 服务的所有者发送一致的数据。
-
当字符串为空时,我希望返回 nil。我的结构中的日期参数是可选的(日期:日期?)。
-
然后您必须通过添加自定义初始化程序直接在结构中解码日期或将日期解码为
String并在结构中添加计算属性。dateDecodingStrategy用于一致的数据。 -
非常感谢。我会试试的。
标签: ios swift nsdateformatter jsondecoder