iOS 9 關鍵字的簡單使用

發表於2016-07-05

前言:

在iOS 9 蘋果推出了很多關鍵字, 目的其實很明確, 主要就是提高開發人員的效率, 有益於程式設計師之間的溝通與交流, 在開發中程式碼更加規範!

1. nullable 與 nonnull

nullable : 表示可以為 nil
nonnull : 表示不可以為 nil
這兩個關鍵字只能修飾物件, 不能修飾基本資料型別, 可以用在屬性, 方法的引數, 方法的返回值使用, 在預設情況下, 不加nullable, setter 和 getter 都是可以為nil

我們來看下如何使用, 以nullable為例如下:

在方法中怎麼使用呢? 我們來看看:

我們在呼叫屬性或者方法時候, 系統會提示你當前的物件是否為nil如下圖:

112353624-4e08f728f45de9a0

 122353624-75e73b585de47978

另外還有2個巨集如下:

在這兩個巨集之間的所有物件屬性預設都是nonnull

關鍵字: null_resettable

getter :不可以為nil
setter :可以為nil
如果使用 null_resettable 就必須重寫 getter或者setter方法. 目的是為了處理值為空的情況
使用方法如下:

關鍵字: _Null_unspecified

不確定是否為空, 此關鍵字個人感覺意義不是很大, 因為物件屬性預設就是不確定的
使用方法如下:

2. 泛型

通過使用泛型, 我們可以非常容易地獲取其中的元素,並訪問其特有的屬性和方法, 一般使用在集合中使用(例如:陣列,字典), 當方法呼叫的時候才有效果, 我們來看看如何使用:

我們在陣列中使用泛型, 之後我們可以很明確知道陣列中是什麼型別如下圖:

132353624-3be4b16b330d6ed3

在方法中使用泛型.png

142353624-9688f18e72ad9d2c

在NSMutableArray中使用泛型.png

並且在上圖我們可以瞭解到, 在集合裡規定物件的型別, 通過集合取出來的物件可以當做泛型來使用, 並且可以直接用點語法, 可想而知泛型的好處是非常強大的!

協變/逆變
  • __covariant: 協變, 用於資料強制轉換型別(子類可以轉變父類)
  • __contravariant :逆變, 用於資料強制轉換型別(父類可以轉變子類)

3. __kindof

表示當前類, 或者它的子類(__kindof使用: 放在型別前面, 表示修飾此型別)
我們先從 id 開始說起

  • 最開始我們方法的返回值不確定,我們會使用 id 但是使用它會有不好之處, id在編譯的時候不能檢查真實型別, 並且返回值沒有提示

152353624-10a58de6f1186108

返回值使用id沒有提示.png
  • 所以蘋果出現了 instancetype 它會自動識別當前物件是哪個類, 只能在返回值中使用, 但是在呼叫方法時候還是不知道返回什麼型別

162353624-298a45c70d16e7e6

instancetype在編譯能自動識別型別.png
  • 最後蘋果推出了 __kindof 它在呼叫時候很清楚的知道返回的型別, 在我們之前很多地方需要強制型別轉換, 有了它就方便了很多

172353624-95f48ac4807dfa3b

__kindof使用.png

覺得能幫助你的小夥伴點贊一個,歡迎留言交流提出不足之處!

相關文章