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中选择具体的洗衣项,再跳转对应的烘干列表:
- 修改
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) } } } }
- 此时MainView中的第二个NavigationLink可以移除(或者改成其他功能),用户点击LaundryList中的某一行,就能跳转到对应洗衣项的烘干步骤列表。
补充说明
- 两种方案的选择取决于你的业务需求:如果是要汇总所有烘干选项用场景1,如果是每个洗衣流程对应专属烘干步骤用场景2。
- 你的结构体定义(
Identifiable、Codable)都是正确的,问题出在数据传递时的类型匹配和数据提取逻辑上。
内容的提问来源于stack exchange,提问作者Jeria93
相关产品推荐
相关产品推荐

