最近公司有新項(xiàng)目想用Swift寫,故先寫個(gè)小Demo學(xué)習(xí)下,并想記錄下學(xué)習(xí)過(guò)程中遇到的問(wèn)題.
因?yàn)轫?xiàng)目中需要用到很多宏定義所以在oc中我們使用pch文件很容易就解決了這個(gè)問(wèn)題,但是 在Swift 中放棄了C語(yǔ)言中的宏定義, 但是也并非不能進(jìn)行宏定義, 在這里我們可以像java一樣進(jìn)行全局常量的定義, 一樣的方便快捷. 簡(jiǎn)單的宏通過(guò)常量設(shè)置即可, 復(fù)雜的宏就需要使用函數(shù)來(lái)返回了, 但是使用起來(lái)也會(huì)很方便, 下面我就使用Swift記錄下常用的宏定義方法.
- 新建文件, 選擇iOS -> Source -> Swift File

- 簡(jiǎn)單宏定義
首先, 要理解在swift中的宏定義的意義, 在swift中, 并非是預(yù)編譯代碼替換, 而是設(shè)置全局常量, 簡(jiǎn)單宏, 直接let 加常量名即可, 復(fù)雜的宏由于必須保證宏的代碼的語(yǔ)句的合法性(C語(yǔ)言就不用擔(dān)心, 合法不合法都會(huì)被替換), 所以使用函數(shù)進(jìn)行實(shí)現(xiàn), 下面會(huì)舉例說(shuō)明.
import Foundation
import UIKit
let Screen_Bounds:CGRect = UIScreen.main.bounds
let Screen_Width:CGFloat = UIScreen.main.bounds.width
let Screen_Height:CGFloat = UIScreen.main.bounds.height
- 函數(shù)式宏定義
例:(1)swift定義RGB顏色
self.maintainBtn.backgroundColor = UIColor.init(colorLiteralRed: 1.0/255.0, green: 192/255.0,blue: 152/255.0, alpha: 1.0)
例:(2)oc中定義RGB類型顏色
#define RGB(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]
self.maintainBtn.backgroundColor = RGB(1, 192, 152);
如何使swift中也能便捷的使用rgb定義顏色了,這個(gè)時(shí)候就要通過(guò)函數(shù)來(lái)實(shí)現(xiàn)了.
func rgbColor(redFlot:Float,greenFloat:Float,blueFloat:Float) -> UIColor {
return UIColor.init(colorLiteralRed: redFlot/255.0, green: greenFloat/255.0, blue: blueFloat/255.0, alpha: 1.0)
}
self.maintainBtn.backgroundColor = rgbColor(redFlot: 1, greenFloat: 192, blueFloat: 152)
只需要在我們最初創(chuàng)建的文件中定義該函數(shù)就可以達(dá)到oc中宏
定義一樣的效果,是不是很方便??
-
當(dāng)然有時(shí)候我們還需要對(duì)常用的第三方進(jìn)行宏定義以便使用起來(lái)更便捷,其實(shí)方法和上面的一樣但是在引用第三方的時(shí)候會(huì)遇到一些問(wèn)題這里一起記錄下
(1):首先我們需要有一個(gè)橋接頭文件,這個(gè)很簡(jiǎn)單只有在Swift中創(chuàng)建一個(gè)oc類的時(shí)候Xcode會(huì)自動(dòng)給我們創(chuàng)建一個(gè)橋頭文件,但是如圖

如果上面路徑已存在的話Xcode就不會(huì)給我們自動(dòng)創(chuàng)建了,第一次發(fā)現(xiàn)這個(gè)問(wèn)題是我也懵逼以為我的Xcode有bug跟同事的不一樣了.
(2):在橋頭文件中引入第三方頭文件
#import "AFNetworking.h"
#import "MBProgressHUD.h"
#import "MJExtension.h"
#import "MJRefresh.h"
#import "MBProgressHUD.h"
但是這時(shí)候我們還是無(wú)法使用這些第三方,這是因?yàn)閟wift還是無(wú)法找到oc類庫(kù)文件的路徑,這時(shí)候就需要在

這行進(jìn)行添加,值得注意的是
添加需要輸入相對(duì)路徑(是文件夾的路徑不是文件路徑?。。。?,并且后面的選項(xiàng)為recursive。現(xiàn)在在swift項(xiàng)目中就可以使用了
func showMsg(currentView:UIView){
let hub = MBProgressHUD.showAdded(to: currentView, animated: true)
hub.label.text = "正在加載"
hub.hide(animated: true, afterDelay: 1.5)
}
// MARK: RequestData
func requestData() {
showMsg(currentView: self.view)
}