我遇到了严重的性能问题,使用我们的API从SwiftyJson解析JSON并填充核心数据.
这些数据是用Alamofire下载的,它运行得很好,但用SwiftyJson解析json的速度很慢.为了查看库是否确实存在问题,我重写了在解析数据的众多地方之一的json解析.在下面的代码中,我正在分析大约400个旅游景点之一的开放时间.
查看这些屏幕截图中的差异,7,7秒到185毫秒:


Swifty方式:
let openDescription:String = json["OpeningHours"]["OpeningHoursGenericExceptions"].string!
let monOpen:[String] = json["OpeningHours"]["Monday"]["From"].string!.componentsSeparatedByString(":")
let monClose:[String] = json["OpeningHours"]["Monday"]["To"].string!.componentsSeparatedByString(":")
let tueOpen:[String] = json["OpeningHours"]["Tuesday"]["From"].string!.componentsSeparatedByString(":")
let tueClose:[String] = json["OpeningHours"]["Tuesday"]["To"].string!.componentsSeparatedByString(":")
let wedOpen:[String] = json["OpeningHours"]["Wednesday"]["From"].string!.componentsSeparatedByString(":")
let wedClose:[String] = json["OpeningHours"]["Wednesday"]["To"].string!.componentsSeparatedByString(":")
let thuOpen:[String] = json["OpeningHours"]["Thursday"]["From"].string!.componentsSeparatedByString(":")
let thuClose:[String] = json["OpeningHours"]["Thursday"]["To"].string!.componentsSeparatedByString(":")
let friOpen:[String] = json["OpeningHours"]["Friday"]["From"].string!.componentsSeparatedByString(":")
let friClose:[String] = json["OpeningHours"]["Friday"]["To"].string!.componentsSeparatedByString(":")
let satOpen:[String] = json["OpeningHours"]["Saturday"]["From"].string!.componentsSeparatedByString(":")
let satClose:[String] = json["OpeningHours"]["Saturday"]["To"].string!.componentsSeparatedByString(":")
let sunOpen:[String] = json["OpeningHours"]["Sunday"]["From"].string!.componentsSeparatedByString(":")
let sunClose:[String] = json["OpeningHours"]["Sunday"]["To"].string!.componentsSeparatedByString(":")
Run Code Online (Sandbox Code Playgroud)
本土方式:
var monOpen:[String] = []
var monClose:[String] = []
var tueOpen:[String] = []
var tueClose:[String] = …Run Code Online (Sandbox Code Playgroud) 我有一个在对象中[[String : AnyObject]]调用的字典数组- 每个字典都保存一个作为 String 的名称和一个作为 AnyObject 的 id。roomsUser
我想用名称填充表视图,因此我尝试循环数组并从字典中获取字符串值。
if let roomDict = myUser.rooms as? [[String : AnyObject]] {
for (roomNames, _) in roomDict {
cell.textLabel?.text = roomNames
}
}
Run Code Online (Sandbox Code Playgroud)
我相对较新,从我在教程中看到的内容以及循环字典时的情况来看,您使用下划线来指定您不需要第二个值。因此,只需获取所有第一个值(在本例中为名称),并将它们设置为roomNames变量即可。
然而我在这里很困惑,因为我不是循环字典,而是循环字典数组。所以我不知道该怎么做。我进行了搜索,看到的结果通常都是关于 JSON 的,但这里的情况并非如此。我怎样才能做到这一点?
谢谢你的帮助!