if语句正在使用PreviewProvider中的数据

时间:2020-09-01 15:32:42

标签: swift foreach swiftui

我在ForEach中有一个if语句,条件是使用我的PreviewProvider中的数据,最后只列出了所有内容。我正在努力了解在PreviewProvider中使用什么适当的数据,或者仅显示星期一的数据。

这是代码的一部分

struct RunClubs: View {

    @State var showSearch = false
    @State private var searchText: String = ""
    @Binding var showRuns: Bool
    @State var tap = false

    var weeklyrunclub: WeeklyRunClub

    var body: some View {
        ZStack {
            VStack{
                VStack {
                    SearchBar(searchText: $searchText)
                }
                List{
                    Text("Run Clubs")
                    .font(.title).bold()
                    Section(header: Text("Monday")
                        .font(.title)) {
                                ForEach(runClubData.filter ({
                                    searchText.isEmpty ? true : $0.name.contains(searchText)
                                })) { item in
                                    if self.weeklyrunclub.category == "Monday" {
                                        ClubViews(weeklyrunclub: item)
                                    }
                                }
                    }
                }
                .padding(.top, 15)
            }
            .padding(.top, 65)
//            MARK: Dismiss RunClubs
            HStack {
                Spacer()
                VStack {
                    Image(systemName: "xmark")
                        .font(.system(size: 16, weight: .medium))
                        .foregroundColor(.white)
                        .frame(width: 36, height: 36)
                        .background(Color.black)
                        .clipShape(Circle())
                        .scaleEffect(tap ? 1.2 : 1)
                    Spacer()
                }
                .padding(.trailing, 25)
                .padding(.top, 13)
                .onTapGesture {
                    self.tap = true
                    self.showRuns = false
                    print(self.showRuns)
                    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
                        self.tap = false
                    }

                }
            }
        }
    }
}

struct RunClubs_Previews: PreviewProvider {
    static var previews: some View {
        RunClubs(showRuns: .constant(true),
                 weeklyrunclub: WeeklyRunClub.init(name: "Run Club", location: "Charlotte, NC", date: "Monday", category: "Monday" ))
    }
}

struct ClubViews: View {
    var weeklyrunclub: WeeklyRunClub

    var body: some View {
        VStack(alignment: .leading, spacing: 8.0) {
            HStack {
                Text(weeklyrunclub.name)
                    .font(.headline)
                Spacer()
                Text(weeklyrunclub.date)
            }
            Text(weeklyrunclub.location)
                .font(.subheadline)
        }
    }
}

struct WeeklyRunClub: Identifiable {
    var id = UUID()
    var name: String
    var location: String
    var date: String
    var category: String
}

let runClubData = [
    WeeklyRunClub(name: "Joggers for Lagers", location: "Amor Artis Brewery, Fort Mill", date:"Monday at 6:30 PM", category: "Monday"),
    WeeklyRunClub(name: "Old Armor Run Club", location: "Kannapolis", date:"Monday at 6:00 PM", category: "Monday"),
    WeeklyRunClub(name: "Round Town Club", location: "", date: "Monday at 6:30 PM", category: "Monday"),
    WeeklyRunClub(name: "Taproom Run Club", location: " ", date:"Monday at 6:30 PM", category: "Monday"),
    WeeklyRunClub(name: "Heist Brewery Running Club ", location: "", date:" Monday at 6:30 PM", category: "Monday"),
    WeeklyRunClub(name: "Monday Run at Charlotte Running Company", location: "Dilworth", date:" Monday at 6:30 PM", category: "Monday"),
    WeeklyRunClub(name: "P.U.B. Run at Ultra Running Company", location: "South End", date:"Monday at 6:30 PM", category: "Monday"),
    WeeklyRunClub(name: "Pizza Peel Run Club", location:  "Matthews", date:"Monday at 6:30 PM", category: "Monday"),
    WeeklyRunClub(name: "Clean Juice Run Club", location: "", date:"Monday at 6:30 PM", category: "Tuesday"),
    WeeklyRunClub(name: "Pinhouse Bowl and Run Club", location: "", date:"Monday at 6:30 PM", category: "Tuesday"),
    WeeklyRunClub(name: "Abari Track Club", location: "", date:"Tuesday at 6:45 PM", category: "Tuesday")
]

1 个答案:

答案 0 :(得分:0)

您似乎需要在ForEach item而不是self.weeklyrunclub上应用支票:

ForEach(runClubData.filter {
    searchText.isEmpty ? true : $0.name.contains(searchText)
}) { item in
    if item.category == "Monday" { // replace `self.weeklyrunclub` with `item`
        ClubViews(weeklyrunclub: item)
    }
}