我想保存一个元组数组,其中一个元素是值,另一个元素是Swift 3中的Date。
这是一些硬编码的例子。
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())
有解决方法吗?
我已经考虑过将这两个元素转换为String并将它们保存为字符串数组。但是,将Date转换为String需要多行,我必须将其转换回来。 如果有更有效的方法来存储JSON中的元组或者我错过了什么,请告诉我。谢谢!
答案 0 :(得分:2)
让我们一起玩!
import Foundation
typealias Conf = (idx: Int, interval: TimeInterval)
typealias JSConf = [String]
extension Array where Element == Conf {
func encode() -> JSConf {
return map { "\($0.idx):\($0.interval)" }
}
static func decode(_ jsConf: JSConf) -> [Conf] {
return jsConf.map({ e -> Conf in
let comps = e.components(separatedBy: ":")
return (Int(comps.first!)!, Double(comps.last!)!)
})
}
}
var confs: [Conf] = []
confs.append((4, 60 * 60 * 24 * -15))
confs.append((3, 60 * 60 * 24 * -7))
confs.append((3, 0))
confs.append((1, 60 * 60 * 24 * 1))
confs.append((5, 60 * 60 * 24 * 2))
confs.append((3, 60 * 60 * 24 * 3))
let encode = confs.encode()
let data = ["key": encode]
do {
let _ = try JSONSerialization.data(withJSONObject: data, options: JSONSerialization.WritingOptions())
} catch {
print(error.localizedDescription)
}
let decode = [Conf].decode(encode)
print(decode)
希望这有帮助!