常见的编译器诊断指令

警告⚠️:

1
2
3
4
5
// Xcode会报一条黄色警告
#warning("此处逻辑有问题,明天再说")

// TODO
#warning("TODO: Update this code for the new iOS 12 APIs")

错误❌:

1
2
// 手动设置一条错误
#error("This framework requires UIKit!")
2. #if - #endif 条件判断
1
2
3
4
5
6
7
#if !canImport(UIKit)
#error("This framework requires UIKit!")
#endif

#if DEBUG
#warning("TODO: Update this code for the new iOS 12 APIs")
#endif
3. #file、#function、#line

分别用于获取文件名,函数名称,当前所在行数,一般用于辅助日志输出.

自定义Log

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public struct dc {

/// 自定义Log
///
/// - Parameters:
/// - message: 输出的内容
/// - file: 默认
/// - method: 默认
/// - line: 默认
public static func log<T>(_ message: T, file: NSString = #file, method: String = #function, line: Int = #line) {
#if DEBUG
print("\(file.pathComponents.last!):\(method)[\(line)]: \(message)")
#endif
}
}
4. #available和@available

一般用来判断当前代码块在某个版本及该版本以上是否可用.

1
2
3
4
5
6
7
8
9
10
11
12
if #available(iOS 8, *) {
// iOS 8 及其以上系统运行
}

guard #available(iOS 8, *) else {
return //iOS 8 以下系统就直接返回
}

@available(iOS 11.4, *)
func myMethod() {
// do something
}