在 swift 中打印字典会都打印在同一行,很不美观而且难以阅读,于是网上查了一下,有各种方案,比如使用 dump() 函数,将 Dictionary 转化为 AnyObject (as AnyObjcet),但是效果都不太好,后来在老项目里看到了一个比较优雅的解决方案,把它分享出来~
解决方案
假设现有如下字典需要打印:
let dic = [
"name" : "Tony",
"age" : 18,
"showType" : true,
"phone" : "18888888888",
"enableRealname" : 1,
"playTimeLimit" : 1
] as [String : Any]
借助 JSONSerialization 我们可以将字典优雅地打印到控制台:
let data = try! JSONSerialization.data(withJSONObject: dic, options: .prettyPrinted)
let str = String(data: data, encoding: .utf8)!
print(str)
打印结果:
已经换行啦,而且也保留了 value 的类型(String,int,bool)。
封装
每次打印的时候都写一遍的话太麻烦,所以我们可以简单封装一下:
extension Dictionary {
func jsonString() -> String {
if let data = try? JSONSerialization.data(withJSONObject: self, options: .prettyPrinted),
let jsonStr = String(data: data, encoding: .utf8) {
return jsonStr
} else {
return ""
}
}
}
然后就可以直接这样调用:
print(dic.jsonString())