SwiftUI 中的 List、Form、ForEach,虽然经常一起使用,但它们职责完全不同,理解清楚它们的定位可以写出更清晰、可维护的代码。
简介
1、List,用于展示一组滚动的“行”内容,是布局容器,提供交互功能。
2、Form,用于构建表单样式的布局,是布局容器,对输入控件的提供交互支持。
3、ForEach,用于遍历数组,生成一组视图。不是布局容器,本身不提供交互。
详细介绍
1、List滚动式内容容器(适合展示内容项)
功能:
1、默认滚动行为。
2、内建优化(视图复用、懒加载)。
3、.onDelete、.move 等列表交互功能。
通常用法:
List {
ForEach(fruits, id: \.self) { fruit in
Text(fruit)
}
}

适用于:
1、展示动态数据列表。
2、文件列表、联系人、任务清单。
3、跳转导航入口。
2、Form: 表单布局容器(适合设置界面、用户输入)
自动对输入控件(如 TextField、Toggle、Picker)对齐和美化。
支持 Section 分组,视觉更适合用于设置界面或用户偏好输入。
用法示例:
Form {
Section(header: Text("用户信息")) {
TextField("用户名", text: $name)
}
Section(header: Text("设置")) {
Toggle("启用通知", isOn: $notificationsEnabled)
ColorPicker("主题颜色", selection: $selectedColor)
}
}

适合用于:
1、偏好设置页(macOS/iOS)。
2、注册、登录、编辑资料界面。
3、表单式用户交互界面。
3、ForEach:视图生成器(遍历结构)
作用:遍历数据数组,生成一组视图元素(比如一堆 Text, 一堆 Toggle)。
不是布局容器,必须嵌套在 List、Form、VStack 等容器中使用。
通常用法:
ForEach(0..<5) { index in
Text("第 \(index) 项")
}

用于动态构建视图,比如:
1、List 中每一行。
2、表单中的多个选项。
3、多列、多个图标、标签组等。
总结
Form主要用于表单、用户输入等控件。List用于滚动式内容,ForEach遍历信息,因此,通常List + ForEach组合使用,提供滚动、交互等效果。
1、Form适合输入型、设置型控件,如果需要实现滚动效果,可以嵌套ScrollView,不支持删除、拖动等效果。
2、ForEach只能用于遍历显示数据,不支持滚动、不支持删除、拖动等效果,所以需要配合List实现这些功能,ForEach数据生成内容的结构,不提供交互功能。
3、List提供滚动、删除、拖动等效果,但是数据内容通常需要ForEach提供,偏向于浏览或数据类型。
如果显示静态/动态数据,推荐List + ForEach。
如果是用户设置页面/输入页面,使用Form + Section + TextField。
如果只是生成多个控件,可以在VStack中使用ForEach遍历显示。
相关文章
1、SwiftUI列表List:https://fangjunyu.com/2025/07/05/swiftui%e5%88%97%e8%a1%a8list/
2、SwiftUI表单Form:https://fangjunyu.com/2025/07/05/swiftui%e8%a1%a8%e5%8d%95form/
3、SwiftUI ForEach遍历:https://fangjunyu.com/2025/04/16/swiftui-foreach%e9%81%8d%e5%8e%86/
4、SwiftUI List和Form的分组视图Section:https://fangjunyu.com/2025/01/13/swiftui-list%e5%92%8cform%e7%9a%84%e5%88%86%e7%bb%84%e8%a7%86%e5%9b%besection/