我有多个渐变作为我的应用程序的主题。我希望当渐变(存储在变量中)为特定渐变时,布尔值变为true。但是,我不断收到错误:
“二进制运算符'=='不能应用于两个'LinearGradient'操作数“
请帮助!
这是我的代码:
let pinkGradient = 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 blueGradient = 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)
let yellowGradient = LinearGradient(gradient: Gradient(colors:[Color(red: 240/255, green: 30/255, blue: 50/255), Color(red: 255/255, green: 189/255, blue: 0/255)]), startPoint: .bottomLeading, endPoint: .topTrailing)
if userData.selectedTheme == pinkGradient { //This is where the error occurs
self.isPinkThemeSelected = true
} else if userData.selectedTheme == blueGradient { //This is where the error occurs
self.isBlueThemeSelected = true
} else {
self.isYellowThemeSelected = true
}
您不能直接执行此操作。大多数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: ...
}
}
}