SwiftUI开发简历APP:无需JSON关联AnyView与标题的优化方案
SwiftUI 简历APP视图与标题关联优化方案
不用JSON也能完美解决你现在的问题——把标题和对应的视图绑定成一个整体,用自定义结构体来统一管理,既避免了两个数组索引匹配的风险,也方便后续批量添加按钮。
具体实现步骤
1. 定义关联结构体
先创建一个CVSection结构体,自带唯一ID(遵循Identifiable协议,这样ForEach遍历更方便),同时把标题和视图打包在一起:
import SwiftUI struct CVSection: Identifiable { let id = UUID() let title: String let destination: AnyView // 写个静态方法简化创建,不用每次手动包AnyView static func item(title: String, view: some View) -> CVSection { CVSection(title: title, destination: AnyView(view)) } }
2. 重构ContentView,统一管理按钮项
把原来分开的buttonsViews和titles数组替换成一个CVSection数组,后续加新按钮直接在数组里追加就行:
struct ContentView: View { let columns = [ GridItem(.flexible()), GridItem(.flexible()) ] // 所有按钮统一在这里管理,新增项直接加一行 let cvSections: [CVSection] = [ .item(title: "关于我", view: AboutView()), .item(title: "教育经历", view: EducationView()), .item(title: "相册", view: GalleryView()), // 后续加作品集、技能等直接添加 .item(title: "作品集", view: PortfolioView()), .item(title: "技能清单", view: SkillsView()) ] var body: some View { NavigationStack{ LazyVGrid(columns: columns) { // 直接遍历结构体数组,不用再处理索引 ForEach(cvSections) { section in NavigationLink(section.title) { section.destination } .frame(height: 50) .frame(minWidth: 100) .foregroundColor(.red) .padding() .background(Color.black) .cornerRadius(5) } } } } }
这个方案的好处
- 杜绝索引错误:不用再靠数组索引匹配标题和视图,彻底避免越界或对应错误的问题
- 扩展方便:新增10+按钮只需要在
cvSections数组里追加项,不用改其他逻辑 - 代码更清晰:每个按钮的标题和对应的视图一目了然,可读性拉满
- 纯Swift实现:完全用原生结构体搞定,不需要JSON或其他序列化逻辑
内容的提问来源于stack exchange,提问作者Joten3434
相关产品推荐
相关产品推荐

