作者:Andyy Hope捧毛,原文鏈接观堂,原文日期:2016-04-06
譯者:SketchK;校對(duì):Crystal Sun呀忧;定稿:CMB
時(shí)尚日志师痕,由你做主
自從 Swift 的 beta 版本誕生后,社區(qū)里那些富有探索精神的開(kāi)發(fā)者就迫不及待地在 Swift 的學(xué)海中遨游而账,他們不遺余力地去探索 Swift 的潛力胰坟,同時(shí)交流分享他們從中得到的經(jīng)驗(yàn)。
此前泞辐,在 Twitter 上搜索 Swift笔横,大部分都充斥著關(guān)于 Taylor Swift 的搜索結(jié)果竞滓,以至于我無(wú)法從中列舉出有用的信息,但搞笑的是吹缔,沒(méi)人知道為什么時(shí)至今日商佑,Twitter 上檢索到的信息仍是 Taylor Swift(呵呵……)。另一件人們普遍提及到的 Swift 特性便是:Swift 代碼現(xiàn)在可以對(duì) Emoji 表情進(jìn)行處理厢塘。
func combinedWeatherConditions(lhs: Int, _ rhs: Int) -> Int {
return lhs + rhs
}
let ?? = -10, ?? = 10, ?? = 0
if combinedWeatherConditions(??, ??) == ?? {
print(“?? — No ?? Today.”)
}
“我完全是因?yàn)?emoji 這個(gè)功能而開(kāi)始使用 Swift”- 沒(méi)有人茶没,從來(lái)就沒(méi)人這么做
這是一個(gè)很新穎的功能,或者說(shuō)是增強(qiáng)點(diǎn)俗冻,但是你不大會(huì)將這些 emoji 添加到你的代碼甚至打印語(yǔ)句中礁叔。既然說(shuō)到了打印語(yǔ)句,就不得不說(shuō)一下迄薄,相比較 NSLog
而言琅关,新的 print
調(diào)試語(yǔ)句在功能上做了很人性化的簡(jiǎn)化。
NSLog
作為初級(jí)調(diào)試的主力讥蔽,NSLog 簡(jiǎn)單易用涣易,如果想查明某個(gè)值或者在 runtime 中通知開(kāi)發(fā)者某些事件,NSLog 絕對(duì)是第一選擇冶伞,可以打印出你所關(guān)心的任意信息或任意對(duì)象新症。但在我看來(lái),默認(rèn)的 NSLog 信息里面包含了太多的無(wú)用信息:
2016–04–02 09:15:25.660 Blog_Print[13053:3567169] Hello, cruel world. Why don’t you love me? Whyyy!!!
不要誤會(huì)我响禽,我認(rèn)為原本負(fù)責(zé) NSLog 的工程師的本意是將其打造成一個(gè)優(yōu)秀的日志輸出工具徒爹,其格式可細(xì)分為:
[Date stamp] [Time stamp] [Project name] [Process ID: Thread ID] [Message]
但是,對(duì)于大多數(shù)類型的輸出日志來(lái)說(shuō)芋类,這些信息實(shí)在太多了隆嗅。日期,時(shí)間戳侯繁,線程和進(jìn)程的標(biāo)識(shí)符占距了大量空間胖喳,尤其在你恰巧把控制臺(tái)放在 Xcode 底部中間且靠右的地方時(shí),由于控制臺(tái)的空間非常有限贮竟,就顯得這些信息更長(zhǎng)了丽焊。
精簡(jiǎn) NSLog 輸出的理由無(wú)須再說(shuō)了,而我們想要的就是讓它剔除冗余的內(nèi)容咕别,只展現(xiàn)出最原始的信息技健。
Hello, beautiful world! I love you.
但或許,或許有那么一點(diǎn)惰拱,我們把它弄的太簡(jiǎn)單了... 我知道你在想什么雌贱,但請(qǐng)暫且忍耐一下,讓我把話說(shuō)完。
“這個(gè)家伙剛才抱怨 NSLog 打印的太多了帽芽,現(xiàn)在又嫌它打印的太少了?呵呵呵... 這樣的家伙實(shí)在是太難伺候了翔冀〉冀郑“ - 你
就像穿衣打扮一樣,不同的服裝適合不同的場(chǎng)合或目的纤子。就好比你不會(huì)在雪地里穿短褲和背心玩耍搬瑰,對(duì)不對(duì)?
打印本身并不應(yīng)該有任何不同控硼,有時(shí)你需要打印日期泽论,有時(shí)需要打印 API 的調(diào)用情況,有時(shí)你只希望自己的日志內(nèi)容能突出顯示卡乾,相信我翼悴,你一定需要這個(gè)功能。這也是我們要討論的關(guān)鍵幔妨。
如果在項(xiàng)目中使用了一些第三方庫(kù)鹦赎,就會(huì)注意到它們?cè)诳刂婆_(tái)中增加了大量的無(wú)用垃圾信息,太多垃圾信息了误堡,Wall-E 都郁悶了(譯者注:《機(jī)器人總動(dòng)員》中的機(jī)器人 walle古话,負(fù)責(zé)清理分裝地球上的垃圾廢品)。嗯锁施,我就在說(shuō)你呢陪踩,Urban Airship。(譯者注: Urban Airship 是一個(gè)第三方庫(kù))
emoji 是永遠(yuǎn)都不嫌多
剛才我說(shuō)了 emoji 是一個(gè)非常新穎的功能悉抵,不僅如此肩狂,它還一個(gè)非常實(shí)用的功能。在打印語(yǔ)句中加入 Emojis 極大的改善了調(diào)試過(guò)程基跑,在分析控制臺(tái)的輸出內(nèi)容時(shí)減少相應(yīng)的認(rèn)知負(fù)荷婚温。
溫馨提示:
在 maxOS 系統(tǒng)的任意文本框中按下 Ctrl + Cmd + Space 就會(huì)彈出 emoji .

Strings
let string = "Emojis are life"
print("?? " + string)
// ?? Emojis are life
NSDate
let date = NSDate()
print("?? " + String(date))
// ?? 2016-04-02 00:14:18 +0000
NSURL
let url = NSURL(string: "http://www.andyyhope.com")
print("?? " + String(url))
// ?? http://www.andyyhope.com
NSError
NSError
let userInfo = [NSLocalizedDescriptionKey: "File not found"]
let error = NSError(domain: "Domain", code: 404, userInfo: userInfo)
print(“?? “ + “\(error.code): “ + error.localizedDescription)
// ?? 404: File not found
AnyObject
AnyObject
let anyObject = UIColor.redColor()
print("?? " + String(anyObject))
// ?? UIDeviceRGBColorSpace 1 0 0 1
跟同事開(kāi)個(gè)玩笑
let joke = "What is this... A center for ANTS?!"
print("???? " + joke)
// ???? What is this... A center for ANTS?!

在 iOS 9.1 中已經(jīng)有 184 個(gè) emoji 表情可供使用,emoji 數(shù)量樣子還會(huì)繼續(xù)增加媳否。在眾多的 emoji 中栅螟,總有一款適合你的日志輸出。
實(shí)現(xiàn)它
不要誤會(huì)我篱竭,實(shí)現(xiàn)上面的東西實(shí)在是有點(diǎn)......如果我還繼續(xù)給你說(shuō)這點(diǎn)東西的話力图,估計(jì)我馬上就能收到 Hoover 公司的勒令停止通知函(cease and desist letters)了。
Wrapping anything that isn’t a string inside String parentheses, and also finding the right emoji is an incredible pain and usually impossible if the one you’re looking for isn’t within the “Frequently Used” section.
把一個(gè)不是 string 類型的東西包裹在 String 中掺逼,還要匹配合適的 emoji 吃媒,這幾乎不可能實(shí)現(xiàn),如果你要找的不在"不常用"的部分里。
我感覺(jué)系統(tǒng)貌似能感知你要尋找哪個(gè) emoji 表情赘那,然后把它藏在第五維度的空間里好讓你永遠(yuǎn)找不到刑桑,真讓人抓狂。
似乎便便的 emoji 表情沒(méi)有了募舟?還是它一直就沒(méi)有來(lái)著祠斧? - 你
等等,它在這拱礁!我發(fā)誓我剛才找過(guò)這里白练妗!...什么人生啊這都是呢灶? - 你 (十分鐘之后)
不管怎樣吴超,這篇文章示范了使用 emoji 可以帶來(lái)的效率上的提升,通過(guò)這種方式可以區(qū)分不同類型的信息鸯乃,在閱讀的時(shí)候減少不必要的認(rèn)知負(fù)擔(dān)鲸阻。
如果你愿意繼續(xù)聽(tīng)下去的話,我會(huì)在第二和第三篇文章里討論如何合理的實(shí)現(xiàn)現(xiàn)在說(shuō)的這些東西飒责,同時(shí)我也會(huì)講一些如何讓 emoji 輸出日志更整潔赘娄、有用的小技巧。
本文由 SwiftGG 翻譯組翻譯宏蛉,已經(jīng)獲得作者翻譯授權(quán)遣臼,最新文章請(qǐng)?jiān)L問(wèn) http://swift.gg。