Swift (5.4) 关键字学习

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 }

as: 类型转换 参考 官网

// 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

你可能感兴趣的:(Swift (5.4) 关键字学习)