ios - 如何将数据从一个 SwiftUI 视图文件传递到另一个?
问题描述
基本要点是我正在构建一个膳食计划应用程序。我是 Swift 和 SwiftUI 的新手,这是我的第一个项目,所以我可能犯了一个菜鸟错误大声笑基本上我想将当前索引(这是一天的数据对象,它是饭菜)传递给 DailyMealPlan 视图我点击相应的卡片。当我将 currentDay 变量传递给视图时,我没有收到错误,但在第二个视图文件中,我不确定如何处理该数据。我不断收到“CurrentMealPlan 不在范围内”的错误消息。我了解范围的工作原理,并且我怀疑在将数据传递到第二个视图时我只是遗漏了一些东西。
ForEach 代码
ForEach(CurrentMealPlan.indices) { index in
let currentDay = CurrentMealPlan[index]
NavigationLink(
destination: DailyMealPlan(DailyMealPlan: currentDay))
{
MealPlanCard(
Day: "\(CurrentMealPlan[index].DayTitle)",
Breakfast: "\(CurrentMealPlan[index].Breakfast)",
Lunch: "\(CurrentMealPlan[index].Lunch)",
Dinner: "\(CurrentMealPlan[index].Dinner)"
)
}
}
DailyMealPlan 视图
struct DailyMealPlan: View {
var DailyMealPlan: Day = CurrentMealPlan[index]
var body: some View {
ZStack {
ScrollView {
VStack {
SingleMealCard(Meal: "Breakfast", CalCount: 500, MealInfo: "Meal info here")
SingleMealCard(Meal: "Lunch", CalCount: 500, MealInfo: "Meal info here")
SingleMealCard(Meal: "Dinner", CalCount: 500, MealInfo: "Meal info here")
}
}
}
}
}
当前膳食计划模型
struct Day: Hashable {
var id: Int
var Date: String
var DayTitle: String
var Breakfast: String
var Lunch: String
var Dinner: String
init(id:Int=0,Date:String="",DayTitle:String="",Breakfast:String="",Lunch:String="",Dinner:String="") {
self.id = id
self.Date = Date
self.DayTitle = DayTitle
self.Breakfast = Breakfast
self.Lunch = Lunch
self.Dinner = Dinner
}
}
let CurrentMealPlan: [Day] = [
Day(
id: 0,
DayTitle: "Sunday",
Breakfast:"Oatmeal",
Lunch: "Sandwich",
Dinner: "Cheeseburger with Fries"
)
]
解决方案
让我们来看看你的代码。首先,您CurrentMealPlan
在父视图中声明了数组。它可能看起来像这样:
@State var CurrentMealPlan = [Day]()
注意:正如jnpdx 所评论的,您应该将属性名称小写,例如var currentMealPlan
and var dailyMealPlan
。此外,您不应该为DailyMealPlan
视图和DailyMealPlan
属性使用相同的名称......这非常令人困惑。
你的代码是正确的。然后,您循环CurrentMealPlan
,并希望将每个元素传递给DailyMealPlan
视图:
DailyMealPlan(DailyMealPlan: currentDay))
这也完全没问题。那么CurrentMealPlan is not in scope
错误从何而来?就是这一行:
var DailyMealPlan: Day = CurrentMealPlan[index] /// NO!
请记住,您CurrentMealPlan
在父视图中声明,而不是DailyMealPlan
视图。这意味着DailyMealPlan
视图无法访问CurrentMealPlan
。
但是,DailyMealPlan
视图不需要访问CurrentMealPlan
. 回到父视图,您已经在循环遍历CurrentMealPlan
并将每个视图传递currentDay
给DailyMealPlan
视图。
因此,您需要做的就是定义DailyMealPlan
属性的类型:
struct DailyMealPlan: View {
var DailyMealPlan: Day /// here!
...
}
这让编译器知道var DailyMealPlan
接受一个Day
.
推荐阅读
- c - 理解问题,为什么这两个程序分别需要 3 和 6 秒
- windows - 在 Windows 10 中禁用所有音频设备的独占模式
- python-3.x - 如何对 QComboBox 中的文本执行字母间距?
- java - spring.profiles.active 在 springboot 应用程序中不起作用
- python - 如何将Mac上finder中的文件夹导入python
- python - 如何使用纯 REST 服务发出 Amazon S3 和 SFTP 请求?
- python - Python Kivy 保持文本更新(刷新)
- python - pandas DataFrame 样式丢失表格边框
- node.js - 将 createPages 与用户身份验证和静态内容一起使用
- python - 识别熊猫数据框中的耦合行