Theme file that has the enum
import SwiftUI
enum Theme: String {
case bubblegum
case buttercup
case indigo
case lavender
case magenta
case navy
case orange
case oxblood
case periwinkle
case poppy
case purple
case seafoam
case sky
case tan
case teal
case yellow
var accentColor: Color {
switch self {
case .bubblegum, .buttercup, .lavender, .orange, .periwinkle, .poppy, .seafoam, .sky, .tan, .teal, .yellow: return .black
case .indigo, .magenta, .navy, .oxblood, .purple: return .white
}
}
var mainColor: Color {
Color(rawValue)
}
var name: String {
rawValue.capitalized
}
}
Class that actually initialize the Theme:
import Foundation
struct DailyScrum: Identifiable {
let id: UUID
var title: String
var attendees: Array<Attendee>
var lengthInMinutes: Int
var lengthInMinutesAsDouble: Double {
get {
Double(lengthInMinutes)
}
set {
lengthInMinutes = Int(newValue)
}
}
var theme: Theme
init(id: UUID = UUID(), title: String, attendees: Array<Attendee>, lengthInMinutes: Int, theme: Theme) {
self.id = id
self.title = title
self.attendees = attendees
self.lengthInMinutes = lengthInMinutes
self.theme = theme
}
}
extension DailyScrum {
struct Attendee: Identifiable {
let id: UUID
var name: String
init(id: UUID = UUID(), name: String) {
self.id = id
self.name = name
}
}
}
extension DailyScrum {
static let sampleData: Array<DailyScrum> = [
DailyScrum(title: "Design",
attendees: [Attendee(name: "Diego"), Attendee(name: "Roberto"), Attendee(name: "Rodrigo")],
lengthInMinutes: 10,
theme: .yellow),
DailyScrum(title: "App dev",
attendees: [Attendee(name: "Diego"), Attendee(name: "Roberto"), Attendee(name: "Rodrigo")],
lengthInMinutes: 15,
theme: .indigo),
DailyScrum(title: "Start backend",
attendees: [Attendee(name: "Diego"), Attendee(name: "Roberto"), Attendee(name: "Rodrigo")],
lengthInMinutes: 30,
theme: .purple)
]
static var emptyScrum: DailyScrum {
DailyScrum(title: "", attendees: [], lengthInMinutes: 5, theme: .sky)
}
}
So when im using im actually using this way:
NavigationLink(destination: DetailView(scrum: scrum)) {
CardView(scrum: scrum)
}
.listRowBackground(scrum.theme.mainColor)