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

SwiftUI中通过NavigationLink向自定义视图传递JSON数据的问题

问题原因

你的错误核心是类型不匹配:

  • @State var clean = [Laundry]() 是一个洗衣步骤数组,而TumblingList的初始化参数需要的是烘干步骤数组([Tumbling]),直接传clean自然会提示类型转换失败。
  • 每个Laundry结构体内部包含了tumbling: [Tumbling]属性,烘干数据是嵌套在洗衣数据里的,不能直接把洗衣数组当成烘干数组传。
解决方案

根据你的需求,分两种场景处理:

场景1:展示所有洗衣步骤中的烘干步骤

如果要在TumblingList里展示所有Laundry包含的烘干步骤,用flatMap把嵌套的tumbling数组扁平化:

NavigationLink {
    // 用flatMap提取所有Laundry中的tumbling数组并合并
    TumblingList(tumbling: clean.flatMap { $0.tumbling })
} label: {
    TumbleView()
}

场景2:展示单个洗衣步骤对应的烘干步骤(更符合业务逻辑)

通常烘干是某个洗衣流程的后续步骤,应该先在LaundryList中选择具体的洗衣项,再跳转对应的烘干列表:

  1. 修改WashListRow,添加跳转逻辑:
struct WashListRow: View {
    var laundry: Laundry
    
    var body: some View {
        NavigationLink {
            TumblingList(tumbling: laundry.tumbling)
        } label: {
            HStack(spacing: 30) {
                Image(laundry.image)
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(width: 35, height: 35)
                
                Text(laundry.description)
                    .font(.callout)
            }
        }
    }
}
  1. 此时MainView中的第二个NavigationLink可以移除(或者改成其他功能),用户点击LaundryList中的某一行,就能跳转到对应洗衣项的烘干步骤列表。
补充说明
  • 两种方案的选择取决于你的业务需求:如果是要汇总所有烘干选项用场景1,如果是每个洗衣流程对应专属烘干步骤用场景2。
  • 你的结构体定义(Identifiable、Codable)都是正确的,问题出在数据传递时的类型匹配和数据提取逻辑上。

内容的提问来源于stack exchange,提问作者Jeria93

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:13:15