ios - 如何在 JSONDecoder 中处理空日期字符串

标签 ios swift nsdateformatter jsondecoder

我的json中的日期参数可以为空(“”)。在 JSONDecoder 中如何处理?

自定义的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
    })

最佳答案

根据@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 block 。

关于ios - 如何在 JSONDecoder 中处理空日期字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51919104/

相关文章:

iphone - InAppSettingsKit的替代

swift - 某些 iOS 用户在过滤 Algolia 结果时遇到崩溃

iphone - 如何将日期字符串解析为 iOS 中的 NSDate 对象?

nsdateformatter - 日期格式在 Swift 3 中不起作用

ios - 由于 NSObjectInaccessible 异常,无法更新 NSManagedObject

ios - 如果单例中的值发生变化,则更新标签

ios - 文件下载完成后检查内容类型 nsurlsessiondownloadtask

ios - 从自定义 UITableViewCell 更新数据

objective-c - 将 obj-c 库导入到 swift 会导致解析问题

ios - NSDateFormatter 有时返回 nil