1. 程式人生 > >Swift開發中遇到的注意點(一)

Swift開發中遇到的注意點(一)

最近的專案是使用Swift進行的開發,在開發過程中,有一些東西和OC是不太一樣的,需要特別的注意,這裡也就簡單的介紹和記錄一下。

1. 單例模式

在OC中的單例模式一般都是使用dispatch_once來實現的,可是在Swift4中,該方法已經被廢棄,也就是說單例模式的實現和之前不再一樣。在Swift中,單例的實現是通過靜態成員和let關鍵字來實現的,具體程式碼如下:

class ClassA {
    static let `default` = ClassA()
}

ClassA.default //用來訪問單例物件

可以看到,在使用default的時候加了``符號,這是由於default

是保留關鍵字,如果使用其他名字,如shared,則直接使用變數名即可。

2. OptionalValue,if let

OptionalValue可以說是Swift的標誌了,只要知道Swift的人,都知道Swift語言中的?!,他們具體的含義,這裡無需多說,只是要說,如果類成員屬性的話,一定要選好型別,還有就是如果定義成了!型別,注意使用之前一定要賦值,因為編譯器不會進行檢查。
if let,還有就是guard let else,其實都是一個意思,就是if let a = b, let c = a.func(),如果b是一個OptionValue,那麼當值為nil時,條件不成立;,

的作用類似於&&,但是不能使用&&,因為let語句並沒有返回值。還有一種情況,就是if var a = b也是可以使用的,和if let含義相同。

3. @discardableResult

這個就是一個簡單的說明,在函式的上方加上這個修飾器,在呼叫的時候,可以忽略返回值,如果不新增,那麼在呼叫處如果沒有使用返回值,Xcode會進行告警。

4. weak

Swift中沒有了屬性的strong/assign/copy之類的修飾符,但是weak還是存在的,所以這裡要注意一下。Swift中class物件的引用預設都是強引用,所以也會存在有迴圈引用的問題,這個時候,就需要對屬性新增weak

修飾符,weak修飾的屬性是弱引用,這樣就可以避免迴圈引用了。
如果需要在closure中弱引用self,那麼可以在引數宣告的地方新增[weak self],然後closure中的self就是弱引用了,不過型別也變成了OptionalValue,因為弱引用self,外部self是有可能被釋放的,這裡需要注意一下。

5. protocol + extension VS class

由於Swift支援了對protocol的函式新增預設實現,所以很多公有基礎類就不再需要了,而是可以換成protocol,這樣可以變相的實現多繼承,特別是可以要求部分方法在類中強制實現,部分方法使用預設實現。
當然,也不是所有的類繼承都適合轉換為protocol + extension方式,如果需要有儲存型別的屬性,那麼還是使用公共基類比較好。

6. 名稱空間

名稱空間是一個在OC中不存在的概念,簡單的說,就是引入framework的類(或方法),可以在前面加上模組名稱,來避免和本地定義的類(或方法)重名。
如引入Alamofire中的方法request,可以使用程式碼Almafire.request來呼叫,避免和本地定義的request方法重名導致出現錯誤;當然,如果本地沒有定義request方法,也可以直接呼叫request來訪問該方法。

暫時就先總結了這麼多,後續有的話再繼續講解。