【发布时间】:2017-10-10 01:34:52
【问题描述】:
我想保存一个元组数组,其中一个元素是值,另一个元素是 Swift 3 中的日期。
这是一些硬编码示例。
var currentDateTime = NSDate()
var confArray: [(conf: Int, date: NSDate)] = []
confArray.append((4, currentDateTime.addingTimeInterval(60 * 60 * 24 * -15)))
confArray.append((3, currentDateTime.addingTimeInterval(60 * 60 * 24 * -7)))
confArray.append((3, currentDateTime))
confArray.append((1, currentDateTime.addingTimeInterval(60 * 60 * 24 * 1)))
confArray.append((5, currentDateTime.addingTimeInterval(60 * 60 * 24 * 2)))
confArray.append((3, currentDateTime.addingTimeInterval(60 * 60 * 24 * 3)))
但是,JSON 似乎不允许元组,并且在我执行此类操作时会引发错误。
let trackingContent = ["key": confArray ]
let jsonData = try JSONSerialization.data(withJSONObject: trackingContent, options: JSONSerialization.WritingOptions())
有没有办法解决这个问题?
我考虑过将这两个元素都转换为字符串并将它们保存为字符串数组。但是,将 Date 转换为 String 需要多行,我必须将其转换回来。 请让我知道是否有更有效的方法将元组存储在 JSON 中,或者我是否遗漏了一些东西。谢谢!
【问题讨论】:
-
为什么要使用数组类型?我的建议是将
confArray转换为[Int: [NSDate]] -
您也可以使用时间戳 (timeIntervalSince1970) 代替 NSDate。它可以很容易地转换回日期
-
@DaoNguyen int 值不是唯一的,因此它必须是
[NSDate: Int]或[[Int: NSDate]]。是否有可能在不知道第二种情况下的值的情况下获得日期?我需要订购 confArray,以便我可以访问第 3 个元素中的日期、第 5 个元素中的值等。 -
@Woof 谢谢!使用 timeIntervalSince1970 是有意义的。我正在考虑使用 Date 而不是 NSDate,但如果我必须在 String 和 NSDate 之间切换,NSDate 似乎更好。
-
@DaoNguyen 在使用 JSON 时,您不能使用 Int 作为字典键,它必须是字符串。