本篇目标
理解 SwiftUI 的声明式语法,掌握 View 协议与视图构建方式,能创建和组合基础视图,了解 SwiftUI 的预览与实时刷新机制。
一、SwiftUI 是什么
SwiftUI 是 Apple 在 2019 年推出的新一代界面框架,用声明式语法构建用户界面。
声明式 vs 命令式:
命令式(UIKit):告诉程序每一步怎么做。
声明式(SwiftUI):告诉程序界面应该是什么样。
SwiftUI 的优势:
代码更简洁,可读性高
实时预览,开发效率高
跨平台(iOS、iPadOS、macOS、watchOS、tvOS)
自动适配深色模式、动态字体、本地化
数据驱动界面,状态变化自动刷新
SwiftUI 的局限:
部分复杂界面仍需 UIKit 桥接
最低支持 iOS 13
部分高级功能依赖新系统版本
二、View 协议
SwiftUI 中所有界面元素都是 View。
protocol View {
associatedtype Body: View
var body: Body { get }
}自定义视图:
struct ContentView: View {
var body: some View {
Text("Hello, SwiftUI!")
}
}说明:
struct定义视图,遵循View协议。body是计算属性,返回some View。some View表示不透明返回类型,隐藏具体类型。
为什么用 struct:
值类型,轻量,适合频繁创建。
无继承,用组合代替。
状态管理更清晰。
三、基础视图
Text
显示文字。
Text("Hello, World!")Image
显示图片,支持系统图标和资源图片。
Image(systemName: "star.fill")
Image("logo")Button
可点击按钮。
Button("点击我") {
print("按钮被点击")
}其他常用视图
Toggle:开关Slider:滑块TextField:文本输入List:列表VStack/HStack/ZStack:布局容器
四、视图修饰符
修饰符用于修改视图的外观和行为。
Text("Hello")
.font(.title)
.foregroundColor(.blue)
.padding()常用修饰符:
修饰符 | 作用 |
|---|---|
| 设置字体 |
| 设置前景色 |
| 添加内边距 |
| 设置背景 |
| 设置圆角 |
| 设置尺寸 |
| 设置透明度 |
修饰符链:
修饰符按顺序应用,顺序不同效果可能不同。
Text("Hello")
.padding()
.background(Color.blue)
.cornerRadius(10)五、视图组合
SwiftUI 通过组合小视图构建复杂界面。
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.blue)
Text("Hello, SwiftUI!")
.font(.title)
Text("从零开始学习 iOS 开发")
.font(.subheadline)
.foregroundColor(.gray)
}
.padding()
}
}提取子视图:
struct HeaderView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.blue)
Text("Hello, SwiftUI!")
.font(.title)
}
}
}
struct ContentView: View {
var body: some View {
VStack {
HeaderView()
Text("从零开始学习 iOS 开发")
.font(.subheadline)
.foregroundColor(.gray)
}
.padding()
}
}六、预览与实时刷新

SwiftUI 支持实时预览,修改代码后界面自动更新。
打开预览:
打开包含
#Preview的文件。点击右上角 Adjust Editor Options。
选择 Canvas。
或使用快捷键
Command + Option + Enter。
#Preview 宏:
#Preview {
ContentView()
}多设备预览:
#Preview {
ContentView()
}
#Preview("iPad") {
ContentView()
.previewDevice("iPad Pro (11-inch)")
}预览不刷新解决:
点击 Resume
清理项目:Command + Shift + K
重启 Xcode
检查代码是否有编译错误
七、SwiftUI 与 UIKit 的关系
SwiftUI 是未来方向,新项目优先使用。
UIKit 仍可用于复杂界面、旧系统兼容。
可以通过
UIViewRepresentable在 SwiftUI 中使用 UIKit 视图。也可以通过
UIHostingController在 UIKit 中使用 SwiftUI 视图。
八、避坑指南
body 中不要写复杂逻辑:只负责描述界面。
修饰符顺序很重要:先 padding 再 background 与反过来效果不同。
预览不刷新先检查编译错误:编译错误会导致预览失败。
不要在 body 中创建状态:状态应使用 @State 等属性包装器。
some View 不能返回不同类型:需要条件返回时用 Group 或 AnyView。
九、检查清单
[ ] 理解声明式与命令式的区别
[ ] 能定义遵循 View 协议的视图
[ ] 会使用 Text、Image、Button 基础视图
[ ] 掌握常用修饰符
[ ] 能组合视图构建界面
[ ] 会使用 #Preview 预览
[ ] 了解 SwiftUI 与 UIKit 的关系