我试图在文本字段下方显示错误。如果文本字段的值少于 2 个字符,我们会显示错误。
唯一的问题是该值必须初始化,即使用空字符串,这会在用户交互开始之前就触发错误。附上代码供参考。
class ErrorViewModel: ObservableObject{
@Published var value: String
var errorToShow: String {
if(value.count < 2){
return "invalid input"
}else{
return ""
}
}
init(value: String) {
self.value = value
}
}
struct ErrorView: View {
@ObservedObject var errorVm: ErrorViewModel
var body: some View {
Text(errorVm.errorToShow)
}
}
struct TextFieldView : View {
@State var value: String
var body: some View {
TextField(
"Enter yor name",
text: $value
)
ErrorView(errorVm: ErrorViewModel.init(value: value))
}
}
#Preview {
TextFieldView(value: "")
}
我只想忽略具有默认值的第一个渲染。这样当用户交互开始时就会显示错误。
我建议将
value
声明为 String?
而不是 String
并在第一次渲染中将 value
设置为 nil
class ErrorViewModel: ObservableObject{
@Published var value: String?
var errorToShow: String {
if let value, value.count < 2 {
return "invalid input"
}else{
return ""
}
}
init(value: String?) {
self.value = value
}
}
struct ErrorView: View {
@ObservedObject var errorVm: ErrorViewModel
var body: some View {
Text(errorVm.errorToShow)
}
}
struct TextFieldView : View {
@State var value: String?
var body: some View {
TextField(
"Enter yor name",
text: Binding(get: { value ?? "" }, set: { value = $0 })
)
ErrorView(errorVm: ErrorViewModel.init(value: value))
}
}
#Preview {
TextFieldView(value: nil)
}