最近公司有新项目想用Swift写,故先写个小Demo学习下,并想记录下学习过程中遇到的问题.
因为项目中需要用到很多宏定义所以在oc中我们使用pch文件很容易就解决了这个问题,但是 在Swift 中放弃了C语言中的宏定义, 但是也并非不能进行宏定义, 在这里我们可以像java一样进行全局常量的定义, 一样的方便快捷. 简单的宏通过常量设置即可, 复杂的宏就需要使用函数来返回了, 但是使用起来也会很方便, 下面我就使用Swift记录下常用的宏定义方法.
- 新建文件, 选择iOS -> Source -> Swift File
- 简单宏定义
首先, 要理解在swift中的宏定义的意义, 在swift中, 并非是预编译代码替换, 而是设置全局常量, 简单宏, 直接let 加常量名即可, 复杂的宏由于必须保证宏的代码的语句的合法性(C语言就不用担心, 合法不合法都会被替换), 所以使用函数进行实现, 下面会举例说明.
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
- 函数式宏定义
例:(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定义颜色了,这个时候就要通过函数来实现了.
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)
只需要在我们最初创建的文件中定义该函数就可以达到oc中宏
定义一样的效果,是不是很方便🙂
-
当然有时候我们还需要对常用的第三方进行宏定义以便使用起来更便捷,其实方法和上面的一样但是在引用第三方的时候会遇到一些问题这里一起记录下
(1):首先我们需要有一个桥接头文件,这个很简单只有在Swift中创建一个oc类的时候Xcode会自动给我们创建一个桥头文件,但是如图
如果上面路径已存在的话Xcode就不会给我们自动创建了,第一次发现这个问题是我也懵逼以为我的Xcode有bug跟同事的不一样了.
(2):在桥头文件中引入第三方头文件
#import "AFNetworking.h"
#import "MBProgressHUD.h"
#import "MJExtension.h"
#import "MJRefresh.h"
#import "MBProgressHUD.h"
但是这时候我们还是无法使用这些第三方,这是因为swift还是无法找到oc类库文件的路径,这时候就需要在
这行进行添加,值得注意的是
添加需要输入相对路径(是文件夹的路径不是文件路径!!!),并且后面的选项为recursive。现在在swift项目中就可以使用了
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)
}