【问题标题】:if statement is using data from PreviewProviderif 语句使用来自 PreviewProvider 的数据
【发布时间】:2020-09-01 15:32:42
【问题描述】:

我在 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")
]

【问题讨论】:

    标签: swift foreach swiftui


    【解决方案1】:

    您似乎需要在 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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-03-16
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多