- 因為之前iOS的開發(fā)一直用Objective-C, 所以習(xí)慣了C語言那種宏定義方式, Swift作為一款更加安全的語言, 放棄了C語言中的宏定義, 有效的防止預(yù)編譯時代碼宏替換的安全隱患, 但是也并非不能進(jìn)行宏定義 -- 定義全局變量(聽說類似Java)
swift中定義宏
- 1.新建文件, 選擇iOS -> Source -> Swift File

swift的.h文件
2.同上, 名字你自己隨心意, 畢竟不重要
3.生成的會是一個.swift空文件, 默認(rèn)應(yīng)該會是Foundation框架, 自己修改為UIKit即可

swift.h文件
- 4.設(shè)置宏定義
- swift中的宏定義的意義:
- 在swift中, 并非是預(yù)編譯代碼替換, 而是設(shè)置全局常量, 簡單宏, 直接let 加常量名即可, 復(fù)雜的宏由于必須保證宏的代碼的語句的合法性, 所以使用函數(shù)進(jìn)行實現(xiàn), 下面會舉例說明:

簡單宏定義
-
但是這種宏定義遠(yuǎn)遠(yuǎn)不能滿足我們的需要, 如果想要實現(xiàn)上面的那種, 通過對view.X, 獲取到view.frame.origin.x的方式, 就要想其他的辦法了, 因為直接let x = frame.origin.x這種方式明顯不合法
錯誤的宏定義- 就要通過函數(shù)來實現(xiàn)了, 把對象作為一個參數(shù), 返回這個控件的具體屬性(其實就是對frame的get方法的二次封裝, 方便我們的使用),

正確:frame的get方法的二次封裝
- 5.宏定義的使用: 不需要導(dǎo)入,直接使用
Swift的宏定義在本質(zhì)上并不應(yīng)該稱之為宏定義, 只是為了方便大家的理解, 實質(zhì)上是一些全局常量和函數(shù)
OC中定義宏的方法很多
- 因為C語言的機制下, 是在編譯代碼時將宏直接替換成你定義的代碼, 所以這在實際使用中, 也是存有安全隱患的
- 方法一: 直接在需要的類定義
#define scrren_width [UIScreen mainScreen].bounds.size.width
方法2: 創(chuàng)建.h文件, 導(dǎo)入吃文件就可以使用
-
1.新建文件, 選擇iOS -> Source -> Header File
創(chuàng)建.h文件 2.然后隨便起個名字就好下一步下一步, 這里就不贅述了.
-
3.生成的文件會是一個空的頭文件(Header File)
.h文件 - C語言的宏定義, 并不是很嚴(yán)謹(jǐn), 任何代碼段都可以進(jìn)行宏定義, 甚至是無效的無序的亂碼也可以.

.h文件定義宏
- 原文摘自JianweiWang


