SwiftUI项目报错:无法将'Season'类型转换为预期参数类型'[Fruit]'
SwiftUI跳转页面时类型不匹配错误解决
我在SwiftUI项目里遇到个问题:点击ListView里的特定项想跳转到另一个页面时,报错Cannot convert value of type 'Season' to expected argument type '[Fruit]',错误位置已经在代码里标出来了。我13岁,刚学编程6个月,试过查资料和调整代码都没用,麻烦帮忙看看。
出错的SideMenuView.swift代码
// // SideMenuView.swift // Fruity // // Created by Hristo on 25.11.23. // import SwiftUI struct SideMenuView: View { var fruits: [Fruit] = fruitsData var seasons: [Season] = seasonData @AppStorage("isContent") var isContent: Bool? var body: some View { VStack { Text("Choose a season of your choice:") .fontWeight(.bold) .font(.title) .foregroundColor(.black) .multilineTextAlignment(.center) Divider() .frame(width: 300, height: 2) .background(Color.black) .padding(.horizontal, 16) // MARK: - Content List { ForEach(seasons[0...3]) { item in NavigationLink(destination: ContentView1(fruits: item)) { // 错误在这里!!! SeasonRowView(seasons: item) .padding(.vertical, 4) } } } .font(.title) Spacer() } .padding(32) .background(Color.white) .edgesIgnoringSafeArea(.bottom) } } #Preview { SideMenuView(fruits: fruitsData, seasons: seasonData) }
相关的ContentView.swift代码
import SwiftUI import SwiftData struct ContentView: View { @State private var isShowingSettings: Bool = false @State private var showMenu: Bool = false @AppStorage("isContent") var isContent: Bool? var fruits: [Fruit] = fruitsData var body: some View { NavigationView { List { ForEach(fruits[0...3]) { item in NavigationLink(destination: FruitDetailView(fruit: item)) { FruitRowView(fruit: item) .padding(.vertical, 4) } } } // 这里有一些不相关的代码... }
错误原因和解决办法
这个错误很直白:ContentView1的fruits参数要求传入水果数组([Fruit]类型),但你现在传进去的是item——也就是单个的Season(季节对象),类型对不上,所以报错了。
根据你的数据模型,分两种情况解决:
情况1:每个Season已经关联了对应的水果数组
如果你的Season结构体是这样写的(里面有一个存储对应水果的属性):
struct Season: Identifiable { let id = UUID() let name: String let fruits: [Fruit] // 每个季节对应的水果列表 }
那直接把传参改成item.fruits就行,这样就把当前季节对应的水果数组传给ContentView1了:
NavigationLink(destination: ContentView1(fruits: item.fruits)) { SeasonRowView(seasons: item) .padding(.vertical, 4) }
情况2:Season没有直接关联水果,需要手动筛选
如果Season里没存对应水果,那你需要从全局的fruitsData里筛选出属于当前季节的水果。假设你的Fruit结构体里有个season属性(比如字符串类型,记录水果属于哪个季节),就这么改:
NavigationLink(destination: ContentView1(fruits: fruits.filter { $0.season == item.name })) { SeasonRowView(seasons: item) .padding(.vertical, 4) }
如果你的Fruit用的是seasonId关联Season的id,就把判断条件改成$0.seasonId == item.id,根据你实际的属性名调整就行。
内容的提问来源于stack exchange,提问作者user22531558
相关产品推荐
相关产品推荐

