swift中並沒有加入宏系統,C語言使用#define定義的基本常量在導入Swift時被Swift編譯自動轉為Swfit語言的全局變量。但復雜的宏定義不能被Swift轉換。Swift中類似宏定義,可以單獨創建一個類,如Const.swift,在此類中聲明一些常量。
- 新建文件, 選擇iOS -> Source -> Swift File
-
同上, 名字你自己隨心意, 畢竟不重要
生成的會是一個.swift空文件, 默認應該會是Foundation框架, 自己修改為UIKit即可
- 設置宏定義
首先, 要理解在swift中的宏定義的意義, 在swift中, 並非是預編譯代碼替換, 而是設置全局常量, 簡單宏, 直接let 加常量名即可, 復雜的宏由於必須保證宏的代碼的語句的合法性(C語言就不用擔心, 合法不合法都會被替換), 所以使用函數進行實現, 下面會舉例說明.
但是這種宏定義遠遠不能滿足我們的需要, 如果想要實現上面的那種, 通過對view.X, 獲取到view.frame.origin.x的方式, 就要想其他的辦法了, 因為直接let x = frame.origin.x這種方式明顯不合法
這個時候還是想要那種便捷的方式, 就要通過函數來實現了, 把對象作為一個參數, 返回這個控件的具體屬性(其實就是對frame的get方法的二次封裝, 方便我們的使用), 下面會舉例說明, 同樣的, 對於其他的宏定義函數, 在這里同樣適用, 就不舉例了
- 宏定義的使用
Swift和java很像, 不同的是java是可以使用, 系統編譯時會自動引入需要的類, 而Swift不需要引入, 這些相比OC都方便了很多, 不會出現引入一排頭文件很丑陋的樣子了, 也避免了很多諸如循環引用的情況(但是也並不是絕對的哦, 所以public class還是有其用武之處的)
這里我想讓我的navView實例能夠使用view的frame(很多時候純代碼相對布局的時候, 會用到諸如view.frame.origin.x + view.frame.size.width的情況, 所以這樣的宏定義還是很方便的), 示例如下
其他的一些宏定義, 例如16進制顏色轉RGB, 一些對於圖片的重繪等方法, 都可以通過全局的宏定義來進行, 這將極大的降低不必要的代碼, 實現代碼復用, 也節省了開發者的時間, 縮短了開發周期.
Swift的宏定義在本質上並不應該稱之為宏定義, 只是為了方便大家的理解, 實質上是一些全局常量和函數, 希望大家不要混淆.