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

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

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

生活类比:

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

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

swift 复制代码
let greet: (String) -> String = { "Hello, \($0)!" }

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

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

swift 复制代码
var nickname: String? = nil
let screenName = nickname ?? "Guest"

三步记忆:

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

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

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

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

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

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

类比:

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

Concurrency:服务员同时盯 N 桌

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

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

Error Handling:ATM 的友好提示

swift 复制代码
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-catch ATM 提示
访问控制 private...open 公寓门禁
相关推荐
sakiko_8 小时前
OC基础语法(与Swift对比)-1
开发语言·ios·objective-c·swift
2501_9160088916 小时前
Flutter 开发 iOS,项目打包成 IPA,命令与免 Xcode两种方法
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
东坡肘子2 天前
举手之劳 -- 肘子的 Swift 周报 #151
人工智能·swiftui·swift
sakiko_2 天前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift
weixin_531670894 天前
Interlude起来:动作动画和文字通知哪个更适合休息提醒?Mac上有没有用桌宠做动作引导的软件?
人工智能·macos·mac·swift
Daniel_Coder5 天前
我用 SwiftUI + GRDB 做了一个「按时吃药·服药提醒」App
ios·swiftui·swift·widgetkit
末代iOS程序员华仔6 天前
iOS个人开发者账号申请为啥会被卡住
ios·swift·figma
denggun123456 天前
信号量(DispatchSemaphore vs AsyncSemaphore)、swift协作式线程池 and python信号量
开发语言·python·swift
2501_915918417 天前
Swift IDE 有哪些?按平台和需求选择Swift 开发工具
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
懋学的前端攻城狮7 天前
把 SwiftUI List 换成 NSTableView:一次目录树卡顿的排查记录
macos·swiftui·swift