我的json中的date参数可以为empty(“”)。如何在JSONDecoder中处理它?</ p>
自定义的dateDecodingStrategy只能处理不同的格式,但不能处理空值。(格式化程序返回的日期不能是可选的。)
当日期具有值时,它将完美地工作。但是当日期为“”时,它将崩溃。
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
})
答案 0 :(得分:0)
根据@vadian的评论,并假设您期望用户相关数据的出生日期(dob)可能由某个用户声明,也可能未由其声明,我要做的是以下
public init(from decoder: Decoder) throws {
//init other properties...
do {
self.dob = try container.decode(Date.self, forKey: .dob)
} catch {
self.dob = nil
}
}
但是再次按照@vadian的注释,如果没有在JSON响应中返回dob会更好。这样,您根本就不需要do / catch块。