如何在ForEach第5个内容之后显示其他屏幕

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

首先我有一个高级订阅,我想要存档的是,在 foreach 的前 3 个内容中,我希望用户能够毫无问题地看到内容,但是当他们单击第 4 个内容时,我想显示付费专区屏幕,所以之后如果他们想看到更多,就必须付费。我觉得我应该检查数组中的项目索引是否是数组中的第三个项目,但我无法得到该逻辑,所以我需要一些帮助,我希望我能很好地解释它。

struct ContentView: View {

@Environment(ViewModel.self) var viewModel
@Environment(PaywallViewModel.self) var paywallViewModel

var body: some View {
    
    @Bindable var vm = viewModel
    
    NavigationStack {
        GeometryReader { geo in
            ScrollView(showsIndicators: false) {
                ForEach(self.viewModel.filteredDinos) { predator in
                        VStack {
                            NavigationLink(destination: PredatorDetail(predator: predator, position: .camera(MapCamera(centerCoordinate: predator.location, distance: 2000)))) {
                                withAnimation {
                                    PredatorCard(predator: predator)
                                }
                            }
                        }
                        .frame(width: geo.size.width)
                    }
                .navigationTitle("Jurassic Journey")
                .searchable(text: $vm.searchText)
                .autocorrectionDisabled()
                .toolbar {
                    ToolbarItem(placement: .topBarLeading) {
                        Button(action: {
                            withAnimation {
                                self.viewModel.alphabetical.toggle()
                            }
                        },
                               label: {
                            Image(systemName: self.viewModel.alphabetical ? "film" : "textformat")
                                .symbolEffect(.bounce, value: self.viewModel.alphabetical)
                            // ? anlamı = alphabetical doğru ise... film kullan : anlamı doğru değil ise... textformat kullan. Ve bu şekilde yazılınca adı Ternary if statement oluyor.
                        })
                    }
                    
                    ToolbarItem(placement: .topBarTrailing) {
                        Menu {
                            Picker("Filter", selection: $vm.currentTypeSelection.animation()) {
                                ForEach(PredatorType.allCases) { type in
                                    Label(type.rawValue.capitalized, systemImage: type.icon)
                                }
                            }
                        } label: {
                            Image(systemName: "slider.horizontal.3")
                        }
                    }
            }
            }
        }
    }
    .navigationSplitViewStyle(.automatic)
    .preferredColorScheme(.dark)
}
arrays swift swiftui
1个回答
0
投票

有多种方法可以做到这一点,使用索引的一种简单方法是使用

 ForEach(Array(viewModel.filteredDinos.enumerated()), id: \.offset) { index, predator in ...

然后您可以检查索引值并采取适当的操作。

© www.soinside.com 2019 - 2024. All rights reserved.