You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:01:55