【问题标题】:Cannot assign to property: '$text' is immutable无法分配给属性:“$text”是不可变的
【发布时间】:2019-12-02 08:09:16
【问题描述】:

我想在 SwiftUI 中创建一个自定义文本字段来处理第一响应者,但我在代码中遇到了这个错误,并且 struct 是不可变的,我不知道该怎么办?

struct CustomTextField: UIViewRepresentable {
class Coordinator: NSObject, UITextFieldDelegate {

    @Binding var text: String
    var didBecomeFirstResponder = false

    init(txt: Binding<String>) {
        self.$text = txt
    }

    func textFieldDidChangeSelection(_ textField: UITextField) {
        text = textField.text ?? ""
    }

}

@Binding var text: String
var isFirstResponder: Bool = false

func makeUIView(context: UIViewRepresentableContext<CustomTextField>) -> UITextField {
    let textField = UITextField(frame: .zero)
    textField.delegate = context.coordinator
    return textField
}

func makeCoordinator() -> CustomTextField.Coordinator {
    return Coordinator(txt: $text)
}

func updateUIView(_ uiView: UITextField, context: UIViewRepresentableContext<CustomTextField>) {
    uiView.text = text
    if isFirstResponder && !context.coordinator.didBecomeFirstResponder  {
        uiView.becomeFirstResponder()
        context.coordinator.didBecomeFirstResponder = true
    }
}
}

【问题讨论】:

  • 试试self._text = txt

标签: swiftui


【解决方案1】:

在 beta 4 中,属性包装器的实现发生了变化。

在 beta 3 之前,这是有效的:

   self.$text = txt

在 beta 4 中,它改为:

   self._text = txt

检查实现的差异,在我发布的另一个问题中:

https://stackoverflow.com/a/57088052/7786555

更多详情:

https://stackoverflow.com/a/56975728/7786555

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2015-12-07
    • 2020-11-17
    • 2020-11-09
    相关资源
    最近更新 更多