init(_:value:format:prompt:)
Creates a text field that applies a format style to a bound value, with a label generated from a localized title string.
Declaration
nonisolated init<F>(_ titleKey: LocalizedStringKey, value: Binding<F.FormatInput>, format: F, prompt: Text? = nil) where F : ParseableFormatStyle, F.FormatOutput == StringParameters
- titleKey:
The title of the text field, describing its purpose.
- value:
The underlying value to edit.
- format:
A format style of type
Fto use when converting between the string the user edits and the underlying value of typeF.FormatInput. Ifformatcan’t perform the conversion, the text field leavesbinding.valueunchanged. If the user stops editing the text in an invalid state, the text field updates the field’s text to the last known valid value. - prompt:
A
Textwhich provides users with guidance on what to type into the text field.
Discussion
Use this initializer to create a text field that binds to a bound value, using a ParseableFormatStyle to convert to and from this type. Changes to the bound value update the string displayed by the text field. Editing the text field updates the bound value, as long as the format style can parse the text. If the format style can’t parse the input, the bound value remains unchanged.
Use the onSubmit(of:_:) modifier to invoke an action whenever the user submits this text field.
The following example uses a Double as the bound value, and a FloatingPointFormatStyle instance to convert to and from a string representation. As the user types, the bound value updates, which in turn updates three Text views that use different format styles. If the user enters text that doesn’t represent a valid Double, the bound value doesn’t update.
@State private var myDouble: Double = 0.673
var body: some View {
VStack {
TextField(
"Double",
value: $myDouble,
format: .number
)
Text(myDouble, format: .number)
Text(myDouble, format: .number.precision(.significantDigits(5)))
Text(myDouble, format: .number.notation(.scientific))
}
}[Image]