Swift 优雅打印字典(Dictionary)

1,721 阅读1分钟

在 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)

打印结果:

image.png

已经换行啦,而且也保留了 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())