let & var: 声明常量、变量
func & ->: 声明方法、方法返回值类型
func greet(person: String, day: String) -> String { ... }
$0, $1, $2...: 在闭包中,快速访问参数
let numbers = [1, 2, 3]
numbers.sorted { (x1, x2) in x1 < x2 } // code1
numbers.sorted { $0 < $1 } // 等价于 code1
mutating: 在值类型(struct、enum) 的实例方法中修改属性值 参考 官网
struct Point {
var a: Int = 0
func getOptionXY(x: Int){
self.a += x // 报错
}
mutating func getOptionXY(x: Int) {
self.a += x // 加上 mutating 后,允许修改属性值
}
}
defer: 定义一个闭包,它会在整个函数执行完,return 之前才执行。用于清理工作、资源回收等
(我见过 MMKV 的 ScopedLock,以及苹果底层的 __AtAutoreleasePool,它跟这些很像,这样的特性简直是Amazing!)
func foo() {
let fileDescriptor = open(url.path, O_EVTONLY)
defer {
close(fileDescriptor)
}
// do some thing
}
guard: 提前退出 (return throw) 函数,可以用 if let 替代,但 guard 可读性更好 官网
is: 类型检查,类似 isKindOf 官网
if obj is String { // do some thing }
// obj : NSObject
let str = obj as! NSString
repeat...while: 就是 do...while
..< & ...: 语法糖,快速创建 Range 对象
Range & ClosedRange,区别在于是否包含尾部
(lldb) po 0..<3
▿ Range(0..<3)
- lowerBound : 0
- upperBound : 3
(lldb) po 0...3
▿ ClosedRange(0...3)
- lowerBound : 0
- upperBound : 3
