Swift 语法速通:iOS 开发必会的 8 大核心概念(图解+类比)

728 阅读2分钟

Struct vs Class:地图复印 vs 谷歌文档

维度struct(值类型)class(引用类型)
传递行为复印一份同一把钥匙
内存位置栈(快)堆+ARC
是否继承
举例PointStringUIViewController
let a = Point(x: 1, y: 2)   // struct
var b = a                   // 复印
b.x = 99                    // 改复印本
print(a.x)                  // 原图仍是 1

生活类比:

  • struct = 纸质地图复印 → 朋友圈圈点点不影响你那份。
  • class = 谷歌文档 → 任何人改动实时同步。

闭包 Closures:外卖“到楼请打电话”

let greet: (String) -> String = { "Hello, \($0)!" }

类比:下单外卖时写下的配送备注(闭包),骑手(系统)在到达时才执行;备注里可以“捕获”你房间号(上下文变量)。

Optional & ??:礼物盒与备用名字

var nickname: String? = nil
let screenName = nickname ?? "Guest"

三步记忆:

  1. 礼物盒(Optional)→ 可能有表,可能是空。
  2. 必须先打开(unwrap)才能用。
  3. 没礼物?用备用名字“Guest”——这就是 ??(Nil-Coalescing)。

Enum 带关联值:电影票附赠“隐藏彩蛋”

enum Ticket {
    case movie(name: String)
    case concert(artist: String, seat: String)
}
let t = Ticket.movie(name: "奥本海默")

类比:票根(enum 值)本身告诉你活动类型,同时附带不同信息:电影→片名;演唱会→歌手+座位。一张票搞定所有场景,编译器还强制你穷尽处理所有 case,告别魔法字符串。

Protocol + 扩展:驾照+全国通用交规

protocol Drivable {
    var speed: Int { get set }
    func drive()
}
extension Drivable {
    func stop() { print("Stopped.") }   // 默认实现
}

类比:

  • 协议 = 驾照考试清单(必须会刹车、打灯)。
  • 协议扩展 = 全国统一驾驶手册,不用再给每位司机重印一本。

Concurrency:服务员同时盯 N 桌

Task {
    let data = await fetchData()   // 后厨做饭
    updateUI(data)                 // 主线程上菜
}

类比:优秀服务员(系统)不会死等厨房,而是先去给别桌点单;菜好了异步回调再上菜,顾客(UI)始终流畅。

Error Handling:ATM 的友好提示

enum ATMError: Error { case noCash; case invalidCard }

func withdraw(amount: Int) throws -> Cash {
    guard amount <= balance else { throw ATMError.noCash }
    return Cash(amount)
}

类比:卡被吞、余额不足,ATM 不会爆炸,而是亮出清晰提示;同理,Swift 用 do-try-catch 让程序优雅降级而不是闪退。

Access Control:公寓门禁等级

关键字可见范围类比
open全宇宙可继承小区大门,还能改规则
public全宇宙可见小区花园,只能看不能改
internal(默认)同模块住户层电梯
fileprivate同文件自家客厅
private同作用域卧室

一页速查表(保存到手机)

概念关键字/示例生活锚点
值类型struct纸质地图复印
引用类型class谷歌文档
闭包{ }外卖备注
空值处理??备用名字
枚举enum Case(let info)电影票附赠信息
协议protocol + extension驾照+通用手册
并发await / Task服务员多桌
错误处理do-try-catchATM 提示
访问控制private...open公寓门禁