如何将可观察对象发布的整数变量绑定到 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>.Publisher”(0x7fd9d5197d10 )。

编辑:使用可选的 Int 作为状态变量可以正常工作,它是 Published 标记,而使用 Observable 对象作为 EnvironmentObject 似乎是导致问题的原因。但是,我需要在 EnvironmentObject 中使用这个变量,因为它在多个视图中使用。

【问题讨论】:

如果 Published Int 不是 Optional 怎么办? 不幸的是,同样的结果,也尝试使用双精度而不是 int 我认为这与 Published 标签有关,但不完全确定,因为我在 Picker 中使用已发布的 String 值并且有效很好。 【参考方案1】:

将其设为非可选并删除 $objectHeight 之前的 $。只留下 ViewModel 一个

$sharedViewModel.objectHeight

【讨论】:

实际上不需要使它成为非可选的,但额外的“$”是导致问题的原因。谢谢?

以上是关于如何将可观察对象发布的整数变量绑定到 SwiftUI 中的 textField?的主要内容,如果未能解决你的问题,请参考以下文章

淘汰赛将选择绑定到动态可观察数组

RxSwift 将可观察对象数组与对象数组结合

将可观察对象的一部分作为角度分量的输入时出错?

RxSwift:将可完成映射到单个可观察?

将可观察的有效载荷拆分为多个可观察的

如何在核心数据上创建可观察对象并将其绑定到 tableView