enum DTCourseCategory: String { case uIKit = "UIKit" case swiftUI = "SwiftUI" case machineLearning = "Machine Learning" }enum DTCourseSource: String { case youTube = "YouTube" case devTechie = "DevTechie.com" case udemy = "Udemy" case medium = "Medium" }
struct DevTechieCourses: Identifiable { let id = UUID() let students: Double let category: DTCourseCategory let source: DTCourseSource }extension DevTechieCourses { static let data: [DevTechieCourses] = [ .init(students: 998, category: .swiftUI, source: .udemy), .init(students: 3432, category: .uIKit, source: .udemy), .init(students: 1324, category: .machineLearning, source: .udemy), .init(students: 1292, category: .swiftUI, source: .devTechie), .init(students: 1342, category: .uIKit, source: .devTechie), .init(students: 566, category: .machineLearning, source: .devTechie), .init(students: 1233, category: .swiftUI, source: .youTube), .init(students: 805, category: .uIKit, source: .youTube), .init(students: 543, category: .machineLearning, source: .youTube), .init(students: 900, category: .swiftUI, source: .medium), .init(students: 570, category: .uIKit, source: .medium), .init(students: 800, category: .machineLearning, source: .medium), ] }
struct ContentView: View { var body: some View { VStack { Text("DevTechie.com") .font(.largeTitle) .foregroundColor(.primary) Text("Number of students by course category.") .font(.subheadline) .foregroundColor(.secondary) Chart(DevTechieCourses.data) { course in BarMark( x: .value("Students", course.students), y: .value("Source", course.source.rawValue) ) .foregroundStyle(by: .value("Category", course.category.rawValue)) .annotation(position: .overlay) { Text(course.students.formatted()) .font(.caption.bold()) } } .frame(height: 300) } .padding() } }
With that we have reached the end of this article. Thank you once again for reading. Subscribe to our weekly newsletter at https://www.devtechie.com