How to compare two LinearGradients? SwiftUI

I have multiple gradients as themes for my app. I want to have a bool that becomes true when the gradient (stored in a variable) is a specific one. However, I keep getting an error: "Binary operator '==' cannot be applied to two 'LinearGradient' operands". Please HELP!


This is my code:


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
}

Replies

As you are told from Swift compiler, you cannot use `==` operator on LinearGradients.

And generally, even when you use some Equatable types, you should better not use such types to represent an app state.


Define an enum type and use it:

enum Theme {
    case pink, blue, yellow
}
class UserData {
    var selectedTheme: Theme?
    //...
}

And you can easily compare it:

        if userData.selectedTheme == .pink {
             self.isPinkThemeSelected = true
        } else if userData.selectedTheme == .blue {
             self.isBlueThemeSelected = true
        } else {
             self.isYellowThemeSelected = true
        }


If you need to bind each theme to a corresponding LinearGradient, you define it somewhere else.