如何将可观察对象发布的整数变量绑定到 SwiftUI 中的 textField?
Posted
技术标签:
【中文标题】如何将可观察对象发布的整数变量绑定到 SwiftUI 中的 textField?【英文标题】:How to bind an observable objects published integer variable to a textField in SwiftUI? 【发布时间】:2021-07-14 20:56:16 【问题描述】:我有一个像这样的视图模型类:
class SharedViewModel: ObservableObject
@Published var objectHeight: Int? = nil
我正在尝试将变量绑定到具有数字格式化程序的文本字段,如下所示(该变量需要在整个过程中使用,因此在当前视图中,视图模型是@EnvironmentObject
):
TextField("Height", value: $sharedViewModel.$objectHeight, formatter: NumberFormatter()
但是当我在模拟器中按回车键时出现此错误:无法将类型“__NSCFNumber”(0x7fd9d6830fa8)的值转换为“Combine.Published
编辑:使用可选的 Int 作为状态变量可以正常工作,它是 Published 标记,而使用 Observable 对象作为 EnvironmentObject 似乎是导致问题的原因。但是,我需要在 EnvironmentObject 中使用这个变量,因为它在多个视图中使用。
【问题讨论】:
如果 Published Int 不是 Optional 怎么办? 不幸的是,同样的结果,也尝试使用双精度而不是 int 我认为这与 Published 标签有关,但不完全确定,因为我在 Picker 中使用已发布的 String 值并且有效很好。 【参考方案1】:将其设为非可选并删除 $objectHeight
之前的 $
。只留下 ViewModel 一个
$sharedViewModel.objectHeight
【讨论】:
实际上不需要使它成为非可选的,但额外的“$”是导致问题的原因。谢谢?以上是关于如何将可观察对象发布的整数变量绑定到 SwiftUI 中的 textField?的主要内容,如果未能解决你的问题,请参考以下文章