Вы не можете сделать это напрямую. Большинство представлений SwiftUI доступны только для записи. Как только вы их создали, вы не можете спросить, как они были созданы. (Путь является заметным исключением из этого правила.)
Вместо этого я бы рекомендовал изолировать ваше состояние от самого градиентного вида. Например, вы можете создать Theme
структуру, такую как:
struct Theme: Identifiable {
let id = UUID() // This ensures that even two themes with the same name are unique
let name: String // This is just for your convenience
let gradient: LinearGradient
}
extension Theme: Equatable {
static func == (lhs: Theme, rhs: Theme) -> Bool { lhs.id == rhs.id }
}
let pinkTheme = Theme(name: "pink",
gradient: LinearGradient(gradient: Gradient(colors:[
Color(red: 123/255, green: 30/255, blue: 122/255),
Color(red: 248/255, green: 74/255, blue: 167/255)]),
startPoint: .bottomLeading, endPoint: .topTrailing))
let blueTheme = Theme(name: "blue",
gradient: LinearGradient(gradient: Gradient(colors:[
Color(red: 0/255, green: 52/255, blue: 89/255),
Color(red: 0/255, green: 168/255, blue: 232/255)]),
startPoint: .bottomLeading, endPoint: .topTrailing))
Теперь вы можете отслеживать selectedThem == pinkTheme
.
Если у вас фиксированное количество тем, вы также можете реализовать это более просто как перечисление:
enum Theme: Equatable {
case pink
case blue
case yellow
var gradient: LinearGradient {
switch self {
case .pink: return LinearGradient(gradient: Gradient(colors:[
Color(red: 123/255, green: 30/255, blue: 122/255),
Color(red: 248/255, green: 74/255, blue: 167/255)]),
startPoint: .bottomLeading, endPoint: .topTrailing)
case .blue: ...
case .yellow: ...
}
}
}