What can you do if a @Binding var
has a different type from the @State var
you want to bind to it?
For example, say you have a Slider
which you bind to a Double
state var, and you want to bind the same state var to an Int
in another View
:
struct MyView: View { @State private var currentStep: Double = 0.0 var body: some View { Slider(value: $currentStep, in: 0.0 ... 9.0, step: 1.0) ViewWithInt(bindingInt: $currentStep) // Error: 'Binding<Double>' is not convertible to 'Binding<Int>' } }
Solution: define an Int
property on Double
:
extension Double { var int: Int { get { Int(self) } set { self = Double(newValue) } } }
Then you can bind this int property:
ViewWithInt(bindingInt: $currentStep.int) // Works
Hey, this actually helped! I was looking for a clean-ish way to get a slider to represent integers and this did the trick. Thank you!