无法分配给属性:“$text"是不可变的 [英] Cannot assign to property: '$text' is immutable

查看:29
本文介绍了无法分配给属性:“$text"是不可变的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I wanted to make a custom textfield in SwiftUI to can handle first responder but I had this error in the code and struct is immutable I don't know what should I do?

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

推荐答案

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

In beta 4, the implementation of property wrappers changed.

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

Until beta 3, this was valid:

   self.$text = txt

在测试版 4 中,它更改为:

In beta 4, it changed to:

   self._text = txt

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

Check for the difference in implementation, in this other question I posted:

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

了解更多详情:

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

这篇关于无法分配给属性:“$text"是不可变的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆