Let's say I have a picker row that allows people to select an option between "1/3", "2/3" and "all".
The three options represent Double
values 0.333...
, 0.666...
and 1.0
respectively. I want to display the options as fractions as shown above, but in my code I want my row's value
to be of type Double
.
If I use a PickerRow<Double>
, the numbers won't show up as fractions.
If I use a PickerRow<String>
, I won't be able to access value
as a Double
.
I know I can set the displayValueFor
property, but that means I need to write a function that converts 0.333...
to "1/3" i.e. Double -> String
.
Wouldn't it be easier to just write a function Int -> String
that accepts the index of the option and returns what that option should display as? This way I don't need to compute the display value.
Hi @Sweeper777, you can call row.options.index(of:)
to create that function.
Otherwise you can have a struct conforming to Equatable with two variables, one being a String and one a Double. You would then create the row as PickerRow<YourStruct>
. But you would also have to define displayValueFor
to show the fraction of the object.
Yeah I know these two workarounds exist. This is kind of a feature request to add something like this:
var optionDisplayStringForIndex: (Int) -> String
or
var optionDisplayStrings: [String]
where each item of this array will be the corresponding display string for the option at the same index in the options
array.
I've just submitted a pull request that adds the ability to do this for DoublePickerRow
s and TriplePickerRow
s.
Most helpful comment
Yeah I know these two workarounds exist. This is kind of a feature request to add something like this:
or
where each item of this array will be the corresponding display string for the option at the same index in the
options
array.