SwiftUI 如何更新 FocusState.Binding?

6 swiftui

我有一个像这样的文本字段包装:

public struct SUIDoubleField: View {
  
  @Binding
  private var value: Double

  private let placeholder: String
  private let formatter: NumberFormatter
  
  private var focused: FocusState<Bool>.Binding
  
  public init(value: Double, placeholder: String, formatter: NumberFormatter, focused: FocusState<Bool>.Binding, onChange: @escaping (Double) -> Void) {
    _value = Binding(
      get: { value },
      set: { onChange($0) })
    self.placeholder = placeholder
    self.formatter = formatter
    self.focused = focused
  }
  
  public var body: some View {
    TextField(placeholder, value: $value, formatter: formatter)
      .focused(focused)
      .textFieldStyle(.roundedBorder)
      .keyboardType(.decimalPad)
      .toolbar {
        ToolbarItemGroup(placement: .keyboard) {
          Button(LOC(.dismissKeyboardButton)) {
            focused = false // Error
          }
        }
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

在这里我无法更新该focus值。我收到这 2 个错误:

Cannot assign to property: 'self' is immutable
Cannot assign value of type 'Bool' to type 'FocusState<Bool>.Binding'
Run Code Online (Sandbox Code Playgroud)

我尝试传递onDone回调,并focused从该组件外部更新状态。这很好用,但我认为传入绑定更方便。我怎样才能做到这一点?

Asp*_*eri 4

值应该分配给包装值而不是绑定本身,例如

  Button(LOC(.dismissKeyboardButton)) {
    focused.wrappedValue = false // << here !!
  }
Run Code Online (Sandbox Code Playgroud)