arrays - 从一个字符串 Swift 中拆分两个日期
问题描述
我有一个按钮,当用户按下它时,它会使用事件的开始日期和结束日期将事件的日期保存到他们的日历中。
此开始日期和结束日期是从 json 响应中加载的,但两个日期都在一个字符串中接收。
我收到的响应格式如下:
{
"events":[
{
"date":"5/12/2021 - 5/14/2021",
},
{
"date":"6/22/2021 - 6/25/2021",
}
]
}
为了正确保存到日历,我需要将开始日期和结束日期与格式如下的字符串分开:“MM/DD/YYYY - MM/DD/YYYY”,以便字符串中的第一个日期是一个名为 startDate 的变量第二个日期是一个名为 endDate 的变量。
如果我对两个“虚拟”数组进行硬编码,我能够解析 json 响应并且按钮可以正常工作,但是一旦我收到此“MM/DD/YYYY - MM/DD/YYYY”,如何将响应拆分为两个单独的日期变量“?
解决方案
这应该适合你:
struct Response: Codable {
let events: [Event]
}
struct Event: Codable {
let date: String
let startDate: Date
let endDate: Date
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
date = try container.decode(String.self, forKey: .date)
let splitted = date.components(separatedBy: " - ")
guard let startDateString = splitted.first,
let endDateString = splitted.last else {
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "'date' should follow the format 'DATE1 - DATE2'"))
}
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "M/dd/yyyy"
guard let extractedStartDate = formatter.date(from: startDateString),
let extractedEndDate = formatter.date(from: endDateString) else {
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "The provided dates are not in the correct format M/dd/yyyy"))
}
startDate = extractedStartDate
endDate = extractedEndDate
}
}
还有一个从你的 json 解析它的例子:
let json = """
{
"events":[
{
"date":"5/12/2021 - 5/14/2021",
},
{
"date":"6/22/2021 - 6/25/2021",
}
]
}
"""
let response = try JSONDecoder().decode(Response.self, from: json.data(using: .utf8)!)
print(response.events)
推荐阅读
- python - SQL查询的python等效哈希
- java - 如何在 for 循环的第二次迭代中检查条件?
- r - what ..x.. stands for in ggplot notation
- python-3.x - AttributeError:“str”对象没有属性“title()”
- javascript - 当 this.state=X 时如何在 React 组件中运行 while 循环
- postgresql - PostgreSQL(全文搜索)与 ElasticSearch
- android - 为什么此警报对话框未在 backPressed 上显示?
- ruby-on-rails - ActiveAdmin 如何装饰关联的链接
- informatica - 自动生成 Web 服务参数
- swift - 拆分视图控制器偶尔会在 iOS 13 上的 iPhone 上显示详细视图