需要根据用户选择和存储的核心数据抓取关联数据显示在行标签中

问题描述 投票:0回答:0

在这里编码较新,因此寻求帮助理解。我成功地设置了用户可以点击现有选项的位置,例如“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"],
    ]

接受建议和指导,因为我已经搜索并观看了大量视频,但无法完全到达那里。

swift dictionary swiftui core-data cross-reference
© www.soinside.com 2019 - 2024. All rights reserved.