---
title: "init(_:sources:selection:content:currentValueLabel:)"
framework: swiftui
role: symbol
role_heading: Initializer
path: "swiftui/picker/init(_:sources:selection:content:currentvaluelabel:)"
---

# init(_:sources:selection:content:currentValueLabel:)

Creates a picker bound to a collection of bindings that generates its label from a string and accepts a custom current value label.

## Declaration

```swift
nonisolated init<C, S>(_ title: S, sources: C, selection: KeyPath<C.Element, Binding<SelectionValue>>, @ContentBuilder content: () -> Content, @ContentBuilder currentValueLabel: () -> some View) where C : RandomAccessCollection, S : StringProtocol
```

## Parameters

- `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 sources collection are updated with the selected option.
- `content`: A view that contains the set of options.
- `currentValueLabel`: A view that represents the current value of the picker.

## Discussion

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)     } } currentValueLabel: {      switch selectedObjectBorders.count {         case 0: Text("None")         case 1: Text(selectedObjectBorders[0].thickness.rawValue)         default: Text("Multiple")      } } This initializer creates a Text view on your behalf. See Text for more information about localizing strings.
