今天偶然發(fā)現(xiàn)一個(gè)debug利器- dump
什么是dump呢迅涮?
文檔里的解釋是:
Dumps an object’s contents using its mirror to standard output
翻譯過來意思是 object的內(nèi)容用其鏡像進(jìn)行標(biāo)準(zhǔn)輸出陶因,也就是通過反射輸出object的內(nèi)容。
我們先看看這個(gè)方法的結(jié)構(gòu)陆错,官方文檔并沒有對參數(shù)的說明凄鼻,所以這里我補(bǔ)充了一下:
/*
* - T:是要打印的參數(shù)肢础,是一個(gè)范型,也就是支持輸出各種類型
* - name: 默認(rèn)是空白肴掷,如果加上則會(huì)在打印內(nèi)容前加入這個(gè)name
* - indent:縮進(jìn)敬锐,默認(rèn)是0,如果設(shè)置則會(huì)向前縮進(jìn)相應(yīng)的空白
* - maxDepth:最大深度呆瞻,默認(rèn)全部打印台夺,可以根據(jù)層級(jí)需要設(shè)置這個(gè)參數(shù)
* - maxItems:最大條數(shù),默認(rèn)是全部打印痴脾,如果需要限制內(nèi)容颤介,可以設(shè)置這個(gè)參數(shù)
*/
@discardableResult func dump<T>(_ value: T,
name: String? = default,
indent: Int= default,
maxDepth: Int = default,
maxItems: Int = default) -> T
下面是dump的幾種使用場景:
打印array:
let names = ["apple", "orange", "banana"]
dump(names)
會(huì)輸出
0 apple
1 orange
2 banana
我們看看print會(huì)輸出什么
print(names)
["apple", "orange", "banana"]
打印dictionary:
let iPhones = ["iPhoneX": 9688, "iPhone8 plus": 7888, "iphone8": 6888]
dump(iPhones)
會(huì)輸出
? 3 key/value pairs
? (2 elements)
- key: "iPhoneX"
- value: 9688
? (2 elements)
- key: "iphone8"
- value: 6888
? (2 elements)
- key: "iPhone8 plus"
- value: 7888
使用print輸出
print(iPhones)
["iPhoneX": 9688, "iphone8": 6888, "iPhone8 plus": 7888]
下面進(jìn)行更個(gè)性化的輸出
dump(iPhones, name: "iPhones' price", indent: 8, maxDepth: 1, maxItems: 2)
會(huì)輸出
? iPhones' price: 3 key/value pairs
? (2 elements)
(2 more children)
如果打印的內(nèi)容太多或者需要進(jìn)行個(gè)性化的打印的時(shí)候,可以靈活使用后面的參數(shù)赞赖。
在我們開發(fā)的過程中滚朵,怎樣使用這個(gè)方法呢?
- 打印log的時(shí)候前域,可以取代print辕近,打印更詳細(xì)的內(nèi)容
- 需要在控制臺(tái)打印數(shù)組或者字典的時(shí)候,用dump輸出的東西更立體匿垄,不會(huì)像print一樣打印出來是一行移宅,對于特別大的數(shù)組或者字典很好用
- debug的時(shí)候能直接打印出對象的信息,我們debug的時(shí)候常常會(huì)打斷點(diǎn)年堆,然后查看對象里的參數(shù)的值吞杭,用dump相當(dāng)于把參數(shù)的那個(gè)界面全部展開并打印到了控制臺(tái)上
有這么多好處,是不是躍躍欲試了呢变丧?快去用用吧芽狗,如果有更好的使用心得,記得和我分享痒蓬。
這篇文章參考了這個(gè)鏈接 并進(jìn)行了一些補(bǔ)充童擎,希望對你有所幫助滴劲,不要再一塵不變的print了。