Как отфильтровать меню категорий, Показать изображения в категории в меню страниц ... Какой самый логичный способ этой системы и какой самый логичный способ этой системы Как была сделана опция фильтрации?
Или я должен оставить этот метод и создать отдельную серию для каждого поля и курса? Какой метод наиболее правильный? Нужно ли группировать в массив или создавать отдельные массивы
Пример. Выберите LYS, Список уроков: ADersCategory Выберите KPSS Список уроков: B
Спасибо
DataModal :
enum AlanCategory : String , CaseIterable , Codable, Hashable {
case LYS
case KPSSLISANS
case YGS
case KPSSONLISANS
case TEOG
}
enum DersCategory : String , CaseIterable , Codable, Hashable {
case Türkçe
case Tarih
case Coğrafya
case Felsefe
case DinKültürü
case Matematik
case Geometri
case Fizik
case Kimya
case Biyoloji
case İngilizce
}
struct Post : Identifiable, Hashable, Equatable, Codable {
var id : String
var alan : AlanCategory
var desc : String
var image : String
var ders : DersCategory
}
let postArray = [
//Lisans
Post(id: UUID().uuidString, alan: AlanCategory.KPSSLISANS, desc: "Alan", image: "test", ders: DersCategory.Türkçe),
Post(id: UUID().uuidString, alan: AlanCategory.KPSSLISANS, desc: "Alan", image: "test", ders: DersCategory.Türkçe),
Post(id: UUID().uuidString, alan: AlanCategory.TEOG, desc: "Alan", image: "test", ders: DersCategory.Biyoloji),
Post(id: UUID().uuidString, alan: AlanCategory.TEOG, desc: "Alan", image: "test", ders: DersCategory.Türkçe),
Post(id: UUID().uuidString, alan: AlanCategory.KPSSLISANS, desc: "Alan", image: "test", ders: DersCategory.Türkçe),
Post(id: UUID().uuidString, alan: AlanCategory.KPSSLISANS, desc: "Alan", image: "test", ders: DersCategory.Türkçe)
]
Домашняя страница:
struct HomePage: View {
@State var showMenu = false
@State var showAlan = false
@State var showDers = false
@State var showKonu = false
@State var showMessage = false
var categories : [String: [Post]] {
.init(grouping: postArray, by: {$0.alan.rawValue})
}
var body: some View {
NavigationView{
ZStack(alignment: .leading){
VStack{
HStack(spacing: 10){
Button(action: {
self.showAlan.toggle()
}) {
HStack{
Text("Alan Seç").frame(width : 100)
Image(systemName: self.showAlan ? "arrow.up" : "arrow.down")
}
}
Button(action: {
self.showDers.toggle()
}) {
Text("Ders Seç").frame(width : 100)
Image(systemName: self.showDers ? "arrow.up" : "arrow.down")
}
Button(action: {
self.showKonu.toggle()
}) {
Text("Konu Seç").frame(width : 100)
Image(systemName: self.showKonu ? "arrow.up" : "arrow.down")
}
}.foregroundColor(.black)
.padding(.top, 20)
Divider()
ScrollView(.vertical, showsIndicators: false) {
VStack {
ForEach(self.categories.keys.sorted(), id:\String.self){ cate in
DenemeRow(cateName: "\(cate)", posts1: self.categories[cate]!)
}
}
}
Spacer()
}
HStack{
ShowMenu()
.frame(width: 300)
.offset(x: self.showMenu ? 0 : -UIScreen.main.bounds.width )
.animation(.timingCurve(0.5, 0.5, 0.5, 0.5))
}
}.gesture(DragGesture().onChanged{drag in
if drag.startLocation.x > drag.location.x {
self.showMenu = false
} else if drag.startLocation.x == drag.location.x {
self.showMenu = false
} else {
self.showMenu = true
}
})
.navigationBarTitle(Text("Anasayfa"), displayMode: .inline)
.navigationBarItems(leading:
Button(action: {
withAnimation{
self.showMenu.toggle()
}
}) {
Image(systemName: "line.horizontal.3.decrease")
.foregroundColor(.black)
},
trailing:
Button(action: {
self.showMessage.toggle()
}) {
Image(systemName: "message")
.foregroundColor(.black)
})
}
}
}
Экран домашней страницы