如何為Swift進行宏定義


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

  1, OC宏定義

 

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

   

  2.然后隨便起個名字就好下一步下一步, 這里就不贅述了.

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

  

  3.C語言的宏定義, 並不是很嚴謹, 任何代碼段都可以進行宏定義, 甚至是無效的無序的亂碼也可以.

  

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

  4.宏定義的使用方法

  首先導入你的頭文件, 名字.h即可

  

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

  

  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的宏定義在本質上並不應該稱之為宏定義, 只是為了方便大家的理解, 實質上是一些全局常量和函數, 希望大家不要混淆.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM