天天看點

Swift 2.0初探

轉眼間,Swift已經一歲多了,這門新鮮、文法時尚、類型安全、執行速度更快的語言已經漸漸的深入廣大開發者的心。

今年6月,一年一度的WWDC大會如期而至,在大會上Apple釋出了Swift 2.0,引入了很多新的特性,以幫助開發者能更快,更簡單的建構應用。我在這裡也說道說道Swift 2.0中值得大家注意的新特性。

guard語句和if語句有點類似,都是根據其關鍵字之後的表達式的布爾值決定下一步執行什麼。但與if語句不同的是,guard語句隻會有一個代碼塊,不像if語句可以if else多個代碼塊。

那麼guard語句的作用到底是什麼呢?顧名思義,就是守護。guard語句判斷其後的表達式布爾值為false時,才會執行之後代碼塊裡的代碼,如果為true,則跳過整個guard語句,我們舉例來看看。

我們以今年聯考為例,在進入考場時一般都會檢查身份證和準考證,我們寫這樣一個方法:

上述代碼中的第一個guard語句用于檢查身份證,如果檢查到身份證沒帶,也就是表達式為false時,執行大括号裡的代碼,并傳回。第二個guard語句則檢查準考證。

如果兩證齊全,則執行最後一個列印語句,上面的兩個guard語句大括号内的代碼都不會執行,因為他們表達式的布爾值都是true。

這裡值得注意的是,id和examNumber可以在guard語句之外使用,也就是說當guard對其表達式進行驗證後,id和examNumber可在整個方法的作用域中使用,并且是解包後的。

我們再用if else語句寫一個類似的方法:

我們可以看到用if else實作的方法顯然不如guard實作的那麼精準。而且id和examNumber的作用域隻限在if的第一個大括号内,超出這個作用域編譯就會報錯。

通過上述兩個小例子不難看出,guard語句正如一個稱職的守衛,層層把關,嚴防一切不允許發生的事,并且讓代碼具有更高的可讀性,非常棒。

在Swift 1.0時代是沒有異常處理和抛出機制的,如果要處理異常,要麼使用if else語句或switch語句判斷處理,要麼使用閉包形式的回調函數處理,再要麼就使用NSError處理。以上這些方法都不能像Java中的try catch異常控制語句那樣行如流水、從容不迫的處理異常,而且也會降低代碼的可讀性。當Swift 2.0到來後,一切都不一樣了。

在Swift 2.0中Apple提供了使用throws、throw、try、do、catch這五個關鍵字組成的異常控制處理機制。下面我們來舉例看看如何使用,我用使用手機刷朋友圈為例。

首先我們需要定義異常枚舉,在Swift 2.0中Apple提供了ErrorType協定需要我們自定義的異常枚舉遵循:

我們定義了導緻不能刷微信的錯誤枚舉’wechatError。然後定義一個檢查是否可以刷微信的方法checkIsWechatOk():

這裡注意,在方法名後有throws關鍵字,意思為該方法産生的異常向上層抛出。在方法體内使用guard語句對各種狀态進行判斷,然後使用throw關鍵字抛出對應的異常。然後我們定義刷微信的方法:

繼續閱讀