如何解决JSON 解码 Swift 中的日期
我遇到了一个奇怪的问题。我可以在流行的在线 Swift 编译器中很好地运行代码,但在 Xcode 和我的 iOS 应用程序中,生成的结果是错误的!
import Foundation
extension DateFormatter {
static let iso8601Full: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
return formatter
}()
}
struct MyObj: Decodable {
var endTime: Date?
}
let jsonString = "{\"endTime\":\"2021-02-20T18:29:59.999Z\"}"
let jsonData: Data? = jsonString.data(using: .utf8)
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(DateFormatter.iso8601Full)
let obj = try decoder.decode(MyObj.self,from: jsonData!)
print(obj)
以上代码在在线 Swift 编译器上产生预期的输出(如下),例如 online.swiftplayground.run、tutorialspoint.com、jdoodle.com
MyObj(endTime: Optional(2021-02-20 18:29:59 +0000))
但是当相同的代码在 iOS 模拟器上的 Xcode 中执行时,产生的输出是这样的:
MyObj(endTime: nil)
这是来自我的 iOS 应用的确切代码:
import Foundation
class RestClient {
static let instance = RestClient()
func get() {
do {
let jsonString = "{\"endTime\":\"2021-02-20T18:29:59.999Z\"}"
let jsonData: Data? = jsonString.data(using: .utf8)
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(DateFormatter.iso8601Full)
let obj = try decoder.decode(MyObj.self,from: jsonData!)
} catch let error {
print("JSON parsing error: \(error)")
}
}
func jsonDecoder() -> JSONDecoder {
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(DateFormatter.iso8601Full)
return decoder
}
}
extension DateFormatter {
static let iso8601Full: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
return formatter
}()
}
struct MyObj: Decodable {
var endTime: Date?
}
谁能帮帮我?我已验证 Xcode 和在线编译器的 Swift 版本均为 5。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。