struct DevTechieCourse: Identifiable { var id = UUID() var name: String var chapters: Int }
extension DevTechieCourse { static var sampleData: [DevTechieCourse] { [ DevTechieCourse(name: "Machine Learning in iOS", chapters: 10), DevTechieCourse(name: "CollectionViews in iOS", chapters: 12), DevTechieCourse(name: "SwiftUI DeepDive", chapters: 14), DevTechieCourse(name: "Goals App in SwiftUI", chapters: 16), DevTechieCourse(name: "Firebase and SwiftUI", chapters: 8), DevTechieCourse(name: "Disney Plus Clone in SwiftUI", chapters: 15), DevTechieCourse(name: "Strava Clone in UIKit, iOS and Swift", chapters: 11), DevTechieCourse(name: "Data Structures and Algorithms in Swift", chapters: 21) ] } }
struct DevTechieCourseViewModel: Identifiable { var dtCourse: DevTechieCourse var id: UUID { dtCourse.id } var name: String { dtCourse.name } var chapters: String { String(dtCourse.chapters) } }
class DevTechieCourseListViewModel: ObservableObject { @Published var dtCourses = [DevTechieCourseViewModel]() func getAll() { dtCourses = DevTechieCourse.sampleData.map(DevTechieCourseViewModel.init) } }
struct DevTechieCourseCell: View { var course: DevTechieCourseViewModel var body: some View { VStack(alignment: .leading, spacing: 10) { Text(course.name) .font(.title2) .bold() Text("There are \(course.chapters) chapters in this course.") .font(.subheadline) .foregroundColor(.secondary) } } }
struct DevTechieCourseHomeView: View { @ObservedObject private var vm = DevTechieCourseListViewModel() var body: some View { NavigationView { List(vm.dtCourses) { course in DevTechieCourseCell(course: course) }.task { vm.getAll() } .navigationTitle("DevTechie Courses") } } }
struct DevTechieCourseHomeView: View { @ObservedObject private var vm = DevTechieCourseListViewModel() var body: some View { NavigationView { List(vm.dtCourses) { course in DevTechieCourseCell(course: course) .listRowSeparator(.hidden) }.task { vm.getAll() } .navigationTitle("DevTechie Courses") } } }
struct DevTechieCourseHomeView: View { @ObservedObject private var vm = DevTechieCourseListViewModel() var body: some View { NavigationView { List(vm.dtCourses) { course in if course.name.contains("SwiftUI") { DevTechieCourseCell(course: course) .listRowSeparator(.hidden, edges: .bottom) } else { DevTechieCourseCell(course: course) } }.task { vm.getAll() } .navigationTitle("DevTechie Courses") } } }
struct DevTechieCourseHomeView: View { @ObservedObject private var vm = DevTechieCourseListViewModel() var body: some View { NavigationView { List(vm.dtCourses) { course in if course.name.contains("SwiftUI") { DevTechieCourseCell(course: course) .listRowSeparatorTint(.green) } else { DevTechieCourseCell(course: course) .listRowSeparatorTint(.red) } }.task { vm.getAll() } .navigationTitle("DevTechie Courses") } } }
.listRowSeparatorTint(.orange, edges: .bottom)
struct DevTechieCourseHomeView: View { @ObservedObject private var vm = DevTechieCourseListViewModel() var body: some View { NavigationView { List { Section(header: Text("SwiftUI")) { ForEach(vm.dtCourses.filter { $0.name.contains("SwiftUI")}) { course in DevTechieCourseCell(course: course) } } Section(header: Text("Others")) { ForEach(vm.dtCourses.filter { !$0.name.contains("SwiftUI")}) { course in DevTechieCourseCell(course: course) } } } .listStyle(.plain) .task { vm.getAll() } .navigationTitle("DevTechie Courses") } } }
struct DevTechieCourseHomeView: View { @ObservedObject private var vm = DevTechieCourseListViewModel() var body: some View { NavigationView { List { Section(header: Text("SwiftUI")) { ForEach(vm.dtCourses.filter { $0.name.contains("SwiftUI")}) { course in DevTechieCourseCell(course: course) } }.listSectionSeparator(.hidden) Section(header: Text("Others")) { ForEach(vm.dtCourses.filter { !$0.name.contains("SwiftUI")}) { course in DevTechieCourseCell(course: course) } } } .listStyle(.plain) .task { vm.getAll() } .navigationTitle("DevTechie Courses") } } }
struct DevTechieCourseHomeView: View { @ObservedObject private var vm = DevTechieCourseListViewModel() var body: some View { NavigationView { List { Section(header: Text("SwiftUI")) { ForEach(vm.dtCourses.filter { $0.name.contains("SwiftUI")}) { course in DevTechieCourseCell(course: course) } }.listSectionSeparatorTint(.red) Section(header: Text("Others")) { ForEach(vm.dtCourses.filter { !$0.name.contains("SwiftUI")}) { course in DevTechieCourseCell(course: course) } } } .listStyle(.plain) .task { vm.getAll() } .navigationTitle("DevTechie Courses") } } }