Swift / SwiftUI 基础知识参考字典

Swift / SwiftUI 条目式速查字典。教程见《Swift / SwiftUI 环境搭建》系列。

1. 可选值解包四式

描述

?? 兜底、if let 作用域解包、guard let 提前退出、! 强解(仅确信时)。

语法和示例

var name: String? = nil
let show = name ?? "匿名"
if let n = name { use(n) }              // 仅作用域内
guard let n = name else { return }      // 之后直接用 n
// name!.length 只用于不可能为 nil 的场合

2. @State / @Binding / @Observable

描述

三层状态:视图私有、父子双向、模型共享;body 只追踪实际读取的属性。

语法和示例

struct Editor: View {
    @State private var draft = ""
    var body: some View { TextField("写", text: $draft) }   // $ 桥 Binding
}
@Observable class Model { var items: [Item] = [] }
struct V: View {
    @State private var model = Model()      // 持有 @Observable
    var body: some View { ForEach(model.items) { ... } }
}

3. guard 与 defer

描述

guard 提前退出减少嵌套;defer 离作用域必执行(清理惯用法)。

语法和示例

func work() throws {
    defer { cleanup() }
    guard let key = load() else { throw Err.missing }
    try risky(key)
}

4. struct 与 class 选型

描述

struct 值语义默认(SwiftUI 首选);需要共享身份/继承才 class。

语法和示例

struct Point: Hashable { var x, y: Double }   // 值拷贝
class Repo { var cache: [String: Data] = [:] } // 引用共享
// class 需注意逃逸闭包里的 self 循环引用——用 [weak self]

5. 协议与扩展

描述

协议声明能力;扩展给任何类型注入方法(含默认实现)。

语法和示例

extension String {
    var slug: String { lowercased().replacingOccurrences(of: " ", with: "-") }
}
protocol Greeter { func greet() -> String }
extension Greeter { func greet() -> String { "hi" } }   // 默认实现

6. NavigationStack

描述

值驱动导航:NavigationLink(value:) + navigationDestination;深链友好。

语法和示例

NavigationStack {
    List(items) { item in
        NavigationLink(value: item.id) { Text(item.title) }
    }
    .navigationDestination(for: Int.self) { id in Detail(id: id) }
}
// 编程式:path.append(42);绑定 NavigationStack(path: $path)

7. Task 与结构化并发

描述

async let 并行;Task 非结构化入口;.task 修饰符随视图生命周期自动取消。

语法和示例

async let a = fetchA()
async let b = fetchB()
let (x, y) = try await (a, b)          // 并行等待
// .task { await model.reload() }     // 视图消失自动 cancel
Task.detached(priority: .background) { heavy() }

8. actor 数据隔离

描述

串行访问保证;@MainActor 标 UI 隔离(视图模型建议标注)。

语法和示例

actor Cache {
    private var store: [String: Data] = [:]
    func get(_ k: String) -> Data? { store[k] }
}
@MainActor class ViewModel { /* UI 安全 */ }
// .task 的闭包不接收 throwing:内部 try? 或 do/catch

9. sheet 与数据驱动模态

描述

item 非 nil 即弹;onDismiss 收尾。

语法和示例

@State private var editing: Doc?
.sheet(item: $editing) { doc in Editor(doc: doc) }
.sheet(isPresented: $flag) { Picker() }

10. 列表身份与动画

描述

ForEach 要 Identifiable;动画绑 value 精确触发。

语法和示例

ForEach(items) { ... }              // Item: Identifiable
ForEach(arr, id: \.self) { ... }    // 无 id 型的兜底
withAnimation(.spring) { list.toggleFlag(id) }
List { ... }.animation(.spring, value: model.items)

11. Self._printChanges

描述

body 首行打印触发重算的状态来源——性能排查第一刀。

语法和示例

var body: some View {
    Self._printChanges()      // 控制台看是谁触发的
    content
}

12. UIKit 互操作

描述

Representable 包装成熟 UIKit 控件;Coordinator 转发代理。

语法和示例

struct MapWrap: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> MapVC { .init() }
    func updateUIViewController(_ vc: MapVC, context: Context) {}
    func makeCoordinator() -> Coord { Coord() }   // 代理回调经它回 SwiftUI
}
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇