无法分配给 属性:'$text' 是不可变的
Cannot assign to property: '$text' is immutable
我想在 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
}
}
}
在 beta 4 中,属性 包装器的实现发生了变化。
在 beta 3 之前,这是有效的:
self.$text = txt
在 beta 4 中,它更改为:
self._text = txt
检查实现上的差异,在我发布的另一个问题中:
更多详情:
我想在 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
}
}
}
在 beta 4 中,属性 包装器的实现发生了变化。
在 beta 3 之前,这是有效的:
self.$text = txt
在 beta 4 中,它更改为:
self._text = txt
检查实现上的差异,在我发布的另一个问题中:
更多详情: