// // CourseCatalogView.swift // CourseCatalogView // // Created by Felix Förtsch on 01.08.21. // import SwiftUI struct CourseCatalogView: View { var courses: [Course] { let url = Bundle.main.url(forResource: "courses", withExtension: "json")! let data = try! Data(contentsOf: url) let decoder = JSONDecoder() var courses = try? decoder.decode([Course].self, from: data) courses?.sort(by: { $0.name < $1.name }) return courses! } @State var searchText = "" var searchResults: [Course] { if searchText.isEmpty { return courses } else { return courses.filter { $0.name.contains(searchText) } } } var body: some View { NavigationView { List { ForEach(searchResults, id: \.self) { item in NavigationLink(destination: CourseDetailsView(item)) { VStack(alignment: .leading) { Text(item.name) Text(item.type) .font(.subheadline) .foregroundColor(Color.gray) } } } } .searchable(text: $searchText) .navigationBarTitle("Courses") } } } struct CourseCatalogView_Previews: PreviewProvider { static var previews: some View { Group { CourseCatalogView().preferredColorScheme(.dark) } } }