I am trying use EquatableView for my View but SwiftUI does not use my == function, it seems I done everything right, but does not work, need help. I want stop SwiftUI from unnecessary rendering also using my == function, but it renders every time and does not use the given function, why?
import SwiftUI
extension Int { var isEven: Bool { return self % 2 == 0 } }
struct ContentView: View {
@State private var number = 3
var body: some View {
VStack {
// EquatableView ( content: NumberView(number: number) ) // <<: Here
// NumberView(number: number).equatable() // <<: Or Here
Button("New Random Number") {
number = Int.random(in: 1...100)
}
Text(number.description).bold().padding()
}
}
}
struct NumberView: View, Equatable {
let number: Int
init(number: Int) {
print("initializing")
self.number = number
}
var body: some View {
print("rendering")
return VStack {
if number.isEven {
Text("EVEN").bold().foregroundColor(Color.green)
} else {
Text("ODD").bold().foregroundColor(Color.red)
}
}
.padding()
}
static func == (lhs: NumberView, rhs: NumberView) -> Bool {
print("Equatable used!")
return lhs.number.isEven == rhs.number.isEven
}
}