相关疑难解决方法(0)

如何使用Swift4中的Codable转换带有可选小数秒的日期字符串

我正在用Swift的Codable替换旧的JSON解析代码,并且遇到了一些麻烦.我想这不是一个可编码的问题,因为它是一个DateFormatter问题.

从结构开始

 struct JustADate: Codable {
    var date: Date
 }
Run Code Online (Sandbox Code Playgroud)

和一个json字符串

let json = """
  { "date": "2017-06-19T18:43:19Z" }
"""
Run Code Online (Sandbox Code Playgroud)

现在让我们解码

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601

let data = json.data(using: .utf8)!
let justADate = try! decoder.decode(JustADate.self, from: data) //all good
Run Code Online (Sandbox Code Playgroud)

但是,如果我们更改日期以使其具有小数秒,例如:

let json = """
  { "date": "2017-06-19T18:43:19.532Z" }
"""
Run Code Online (Sandbox Code Playgroud)

现在它打破了.日期有时会以小秒数回归,有时则不会.我以前解决它的方式是在我的映射代码中我有一个转换函数,它尝试使用和不使用小数秒的dateFormats.我不太确定如何使用Codable来处理它.有什么建议?

nsdateformatter swift dateformatter swift4 codable

30
推荐指数
2
解决办法
6430
查看次数

无法在Swift 4中解码日期

我现在正在努力学习斯威夫特并且还没有走得太远,所以请原谅我,如果这是一个简单的问题; 我一直在努力工作几个小时,但一直无法解决这个问题.

我有一个Codable叫做的课Person.在这堂课上,我有一个Date叫做的属性birthdate.所以它看起来像这样:

class Person : Codable {
    var birthdate: Date = Date()
    var firstName: String = ""
    var lastName: String = ""

    enum CodingKeys : String, CodingKey {
        case birthdate
        case firstName = "first_name"
        case lastName = "last_name"
    }
}
Run Code Online (Sandbox Code Playgroud)

而我正在尝试解码我​​的JSON:

[
    {
        "address": "302 N. 5th St.",
        "base_64_image": null,
        "birthdate": "2009-05-06T18:56:38.367",
        "created": "2017-11-21T16:21:13",
        "emergency_contact": "",
        "emergency_contact_number": null,
        "father_cell_number": null,
        "father_home_number": null,
        "father_name": null,
        "first_name": "John",
        "gender": 1,
        "id": "d92fac59-66b9-49a5-9446-005babed617a",
        "image_uri": …
Run Code Online (Sandbox Code Playgroud)

date ios swift swift4

3
推荐指数
1
解决办法
3828
查看次数

标签 统计

swift ×2

swift4 ×2

codable ×1

date ×1

dateformatter ×1

ios ×1

nsdateformatter ×1