【问题标题】:SwiftUI MacOS using ObservableObject to update StateSwiftUI MacOS 使用 ObservableObject 更新状态
【发布时间】:2020-03-05 10:33:24
【问题描述】:

我在 SwiftUI Mac OS 中有一个状态,它存储我对导航视图的活动选择。导航视图一切正常。

现在我创建了一个新的class,它与Observable Object 确认。在某些子视图中,我将对该对象进行更改。更改完成后,我的 Navigation 视图也更新了对象,据我了解,这是 Observable Object 的功能。

我现在想要实现的是 Observable 对象在我的 Navigation 视图中更改了我的 @State

这是我在导航视图中的声明。 UserData 也存储了一个int,它应该在更改时设置为selection

@EnvironmentObject var userData: UserData

@State var selection: Int?

所以userData.active = 2,也应该设置selection = 2。有我可以触发的 onChange 事件吗?

我将 @State selection 用于我的导航链接中的绑定。

NavigationLink(destination: SecondContentView(), tag: 0, selection: self.$selection)
{

第二种方法,将userData.active : Int 直接用作State。但是,我将 selection State 作为 Binding 传递,当将 EnvironmentObject 的变量传递为 Binding 时,它给了我一个错误。

【问题讨论】:

    标签: swift macos swiftui


    【解决方案1】:

    尝试直接使用UserData,喜欢

    NavigationLink(destination: SecondContentView(), tag: 0, 
        selection: self.$userData.active)
    

    【讨论】:

    • 谢谢。我试错了。我将其更改为 @Published var active : Int?并使用了你的 self.$userData.active 并且它起作用了 :) 赞赏
    • 是否需要将其声明为可选? .. 我想拥有它!= nil 总是
    • @davidev,它在签名中声明为selection: Binding<V?>,所以是的,它是必需的。
    • 谢谢.. 但是当我在选择时使用它时,它工作正常,但是当窗口消失或我单击导航链接时,活动变量设置为 nil。
    • My Int 适用于导航的标签和选择。但是,如果我在推送完成后使用它,值是nil?为什么?
    猜你喜欢
    • 2020-03-21
    • 2022-07-09
    • 1970-01-01
    • 2021-12-11
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2020-12-05
    相关资源
    最近更新 更多