init(_:sources:selection:content:)
Creates a picker bound to a collection of bindings that generates its label from a string.
Declaration
nonisolated init<C, S>(_ title: S, sources: C, selection: KeyPath<C.Element, Binding<SelectionValue>>, @ViewBuilder content: () -> Content) where C : RandomAccessCollection, S : StringProtocolParameters
- title:
A string that describes the purpose of selecting an option.
- sources:
A collection of values used as the source for displaying the Picker’s selection.
- selection:
The key path of the values that determines the currently-selected options. When a user selects an option from the picker, the values at the key path of all items in the
sourcescollection are updated with the selected option. - content:
A view that contains the set of options.
Discussion
If the wrapped values of the collection passed to sources are not all the same, some styles render the selection in a mixed state. The specific presentation depends on the style. For example, a Picker with a menu style uses dashes instead of checkmarks to indicate the selected values.
In the following example, a picker in a document inspector controls the thickness of borders for the currently-selected shapes, which can be of any number.
enum Thickness: String, CaseIterable, Identifiable {
case thin
case regular
case thick
var id: String { rawValue }
}
struct Border {
var color: Color
var thickness: Thickness
}
@State private var selectedObjectBorders = [
Border(color: .black, thickness: .thin),
Border(color: .red, thickness: .thick)
]
Picker(
"Border Thickness",
sources: $selectedObjectBorders,
selection: \.thickness
) {
ForEach(Thickness.allCases) { thickness in
Text(thickness.rawValue)
}
}This initializer creates a Text view on your behalf. See Text for more information about localizing strings.