首先我有一个高级订阅,我想要存档的是,在 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)
}
有多种方法可以做到这一点,使用索引的一种简单方法是使用
ForEach(Array(viewModel.filteredDinos.enumerated()), id: \.offset) { index, predator in ...
然后您可以检查索引值并采取适当的操作。