如何爲Swift進行宏定義

  這陣子一直在自學Swift, 由於以前iOS的開發一直用Objective-C, 因此習慣了C語言那種宏定義方式, Swift做爲一款更加安全的語言, 放棄了C語言中的宏定義, 有效的防止預編譯時代碼宏替換的安全隱患, 可是也並不是不能進行宏定義, 在這裏咱們能夠像java同樣進行全局常量的定義, 同樣的方便快捷. 簡單的宏經過常量設置便可, 複雜的宏就須要使用函數來返回了, 可是使用起來也會很方便, 下面我會分別把OC的宏定義和Swift的全局常量拿出來, 讓你們對比比較. 也會詳細的介紹新建宏定義的方式java

  1, OC宏定義swift

 

  1.新建文件, 選擇iOS -> Source -> Header File安全

   

  2.而後隨便起個名字就好下一步下一步, 這裏就不贅述了.框架

  生成的文件會是一個空的頭文件(Header File)函數

  

  3.C語言的宏定義, 並非很嚴謹, 任何代碼段均可以進行宏定義, 甚至是無效的無序的亂碼也能夠.佈局

  

  由於C語言的機制下, 是在編譯代碼時將宏直接替換成你定義的代碼, 因此這在實際使用中, 也是存有安全隱患的spa

  4.宏定義的使用方法3d

  首先導入你的頭文件, 名字.h便可對象

  

  這裏面的SCREEN_WIDTH就會在編譯時替換成[UIScreen mainScreen].bounds.size.width, 因此通常的宏定義函數或者是計算時, 要在外面加括號, 防止一些錯誤的出現, 而在Swift中, 就不會出現這些安全問題.blog

  

  2, Swift宏定義

  1.新建文件, 選擇iOS -> Source -> Swift File

  

  2.同上, 名字你本身隨心意, 畢竟不重要

  生成的會是一個.swift空文件, 默認應該會是Foundation框架, 本身修改成UIKit便可

  

  3.設置宏定義

  首先, 要理解在swift中的宏定義的意義, 在swift中, 並不是是預編譯代碼替換, 而是設置全局常量, 簡單宏, 直接let 加常量名便可, 複雜的宏因爲必須保證宏的代碼的語句的合法性(C語言就不用擔憂, 合法不合法都會被替換), 因此使用函數進行實現, 下面會舉例說明.

    

  可是這種宏定義遠遠不能知足咱們的須要, 若是想要實現上面的那種, 經過對view.X, 獲取到view.frame.origin.x的方式, 就要想其餘的辦法了, 由於直接let x = frame.origin.x這種方式明顯不合法

  

  這個時候仍是想要那種便捷的方式, 就要經過函數來實現了, 把對象做爲一個參數, 返回這個控件的具體屬性(其實就是對frame的get方法的二次封裝, 方便咱們的使用), 下面會舉例說明, 一樣的, 對於其餘的宏定義函數, 在這裏一樣適用, 就不舉例了

  

  4.宏定義的使用

  Swift和java很像, 不一樣的是java是可使用, 系統編譯時會自動引入須要的類, 而Swift不須要引入, 這些相比OC都方便了不少, 不會出現引入一排頭文件很醜陋的樣子了, 也避免了不少諸如循環引用的狀況(可是也並非絕對的哦, 因此public class仍是有其用武之處的)

  這裏我想讓個人navView實例可以使用view的frame(不少時候純代碼相對佈局的時候, 會用到諸如view.frame.origin.x + view.frame.size.width的狀況, 因此這樣的宏定義仍是很方便的), 示例以下

  

  其餘的一些宏定義, 例如16進制顏色轉RGB, 一些對於圖片的重繪等方法, 均可以經過全局的宏定義來進行, 這將極大的下降沒必要要的代碼, 實現代碼複用, 也節省了開發者的時間, 縮短了開發週期.

  Swift的宏定義在本質上並不該該稱之爲宏定義, 只是爲了方便你們的理解, 實質上是一些全局常量和函數, 但願你們不要混淆.

相關文章
相關標籤/搜索