是否可以使用 SwiftUI 在 TextField 上设置字符限制?

Is it possible to set a character limit on a TextField using SwiftUI?

[已解决]

我正在使用一个可编码结构,它存储从 API 调用中检索到的对象值,所以我使用 Cenk Belgin 的示例修改了我的 TextField,我还删除了我添加的额外位,所以如果任何其他人都在尝试做同样的事情,那么他们就不会从我的应用程序中获得不需要的代码片段。

TextField("Product Code", text: $item.ProdCode)

    .onReceive(item.ProdCode.publisher.collect()) {

    self.item.ProdCode = String([=10=].prefix(5))
}

这是一种方法,不确定您提供的其他示例中是否提到了它:

@State var text = ""

  var body: some View {
    TextField("text", text: $text)
      .onReceive(text.publisher.collect()) {
        self.text = String([=10=].prefix(5))
    }
  }

text.publisher 将在输入时发布每个字符。将它们收集到一个数组中,然后只取前缀。

您也可以直接在文本域绑定中进行:

TextField("Text", text: Binding(get: {item.ProCode}, set: {item.ProCode = [=10=].prefix(5).trimmingCharacters(in: .whitespacesAndNewlines)}))

从 iOS 14 开始,您可以将 onChange 修饰符添加到 TextField 并像这样使用它:

TextField("Some Placeholder", text: self.$someValue)
    .onChange(of: self.someValue, perform: { value in
       if value.count > 10 {
           self.someValue = String(value.prefix(10))
      }
  })

适合我。