Невозможно присвоить свойству: "$text" является неизменным

Я хотел создать настраиваемое текстовое поле в SwiftUI для обработки первого респондента, но у меня была эта ошибка в коде, и структура неизменна. Не знаю, что мне делать?

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
    }
}
}

1 ответ

Решение

В бета-4 реализация свойств оболочки изменилась.

До бета-версии 3 это было действительно:

   self.$text = txt

В бета 4 оно изменилось на:

   self._text = txt

Проверьте разницу в реализации, в этом другом вопросе я разместил:

/questions/49803215/oshibka-ispolzovaniya-stringformat-args-s-swiftui-v-xcode11-beta-4/49803223#49803223

И для более подробной информации:

/questions/50291081/swiftui-kak-realizovat-polzovatelskij-init-s-peremennyimi-binding/50291085#50291085

Другие вопросы по тегам