在这里编码较新,因此寻求帮助理解。我成功地设置了用户可以点击现有选项的位置,例如“Space Mountain”,它会与日期一起显示在列表中。我正在尝试的是交叉引用 Space Mountain 选择(存储在核心数据中),以便用户可以在行中看到 Space Mountain 在“Tomorrowland”和“Magic Kingdom”中。
我不确定我是否应该使用字典、结构或其他方式。欢迎任何建议和指导。
struct RowView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Plans.date, ascending: false)], animation: .default)
private var listPlans: FetchedResults<Plans>
let plans: Plans
var ride: Ride = rides[0]
var body: some View {
HStack(alignment: .top) {
VStack(alignment: .leading, spacing: 2) {
Text(plans.showTitle)
.bold()
Text("\(plans.showDate, style: .date)")
.font(.caption2)
if ride.name == plans.showTitle { //<<Where I'm Trying To Cross Reference The Static Selection "Space Mountain" And Return That It's In Tomorrowland, And Magic Kingdom
Text(ride.park)
}
//Spacer()
}.padding(.top, 5)
Spacer()
}.padding(.top, 5)
}
}
以上尝试无效。我认为可能有更好的方法来解决这个问题。 这是扩展的视图
extension Plans {
var showTitle: String {
return title ?? "Undefined"
}
var showDate: Date {
return date ?? Date()
}
}
我的主要行程视图,我有:
ForEach(groupedEntries(listPlans), id: \.self) { (section: [Plans]) in
Section(header: Text(self.dateFormatter.string(from: section[0].date!))) {
ForEach(section, id: \.self) { plan in
RowView(plans: plan)
.padding()
}
}
我尝试在一个单独的文件中创建一个结构,并将用户选择的内容与“名称”相关联,然后拉回位置和停放,但我不知道怎么做。
class UserSelections: ObservableObject {
@Published var selectedRide = ""
}
struct Ride: Identifiable {
let id = UUID()
var index: Int
var name: String
var location: String
var park: String
}
var rides = [
Ride(index: 1, name: "Space Mountain", location: "Tomorrowland", park: "Magic Kingdom"),
Ride(index: 2, name: "People Mover", location: "Tomorrowland", park: "Magic Kingdom"),
]
我还尝试在 RowView 中创建一个字典并根据一个键提取值,但无法弄清楚如何做多个键,或者如何交叉引用用户选择的值。 (他们从列表中点击,所以我知道字符串会匹配)。
var rides = [
"Space Mountain": ["Tomorrowland", "Magic Kingdom"],
"People Mover": ["Tomorrowland", "Magic Kingdom"],
]
接受建议和指导,因为我已经搜索并观看了大量视频,但无法完全到达那里。