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