MARK TODO FIXME
-
// MARK:
类似OC
中的#pragma mark
-
..MARK: -
类似OC
中的#pragma mark -
-
// TODO:
用于标记未完成的任务 -
// FIXME:
用于标记待修复的问题
image.png
条件编译
//操作系统 masOS\iOS\tvOS\watchOS\Linux\Android\Windows\FreeBSD
#if os(macOS) || os(iOS)
//CPU架构: i386\x86_64\arm\arm64
#elseif arch(x86_64) || arch(arm64)
// swift版本
#elseif swift(<5) && swift(>=3)
//模拟器
#elseif targetEnvironment(simulator)
//可以导入某模块
#elseif canImport(Foundation)
#else
#endif
-
可以在项目中添加自定义的宏
image.png
override func viewDidLoad() {
print("2222")
#if TEST
print("test")
#endif
print("3333")
#if OTHER
print("OTHER")
#endif
print("4444")
}
- 切换
DEBUG
Release
模式
image.png
override func viewDidLoad() {
#if DEBUG
print("DEBUG")
#else
print("Release")
#endif
}
打印
func log<T>(_ msg: T,file: NSString = #file,line: Int = #line,fn: String = #function) {
#if DEBUG
let prefix = "\(file.lastPathComponent)_\(line)_\(fn):"
print(prefix,msg)
#endif
}
系统版本检测
override func viewDidLoad() {
if #available(iOS 10, macOS 10.12, *) {
//对于iOS平台,只在iOS10及以上版本执行
//对于macOS平台,只在macOS 10.12及以上版本执行
//最后的*表示在其他所有平台都执行
}
}
API可用性说明
- 更多用法参考文档
//Person在iOS 10, macOS 10.15及以上版本才可用
//* 表示其他平台都可用
@available(iOS 10, macOS 10.15,*)
class Person { }
struct Student {
//study_ 更名为study
@available(*,unavailable, renamed: "study")
func study_() { }
func study() { }
//run方法在iOS11 macOS10.12 已弃用
@available(iOS, deprecated: 11)
@available(macOS, deprecated: 10.12)
func run() {
}
}
iOS程序入口
- 在
AppDelegate
上面默认有个@UIApplicationMain
标记,表示:编译器自动生成入口代码main函数代码
,自动设置AppDelagate
为APP
的代理
网友评论