gpt4 book ai didi

ios - SwiftUI 和 Combine - 在另一个更改时更新 View 模型中的变量

转载 作者:行者123 更新时间:2023-12-01 19:35:16 24 4
gpt4 key购买 nike

我目前正在构建一个小型单 View 应用程序,以帮助学习更多 SwiftUI。该应用程序是一个简单的应用程序,用于计算比率值。我现在有 4 个主要变量,比率的左侧和右侧,以及将按比率计算的第一个和第二个值。最初我将这些都存储为 @State 属性:

@State var leftSide = Double()
@State var rightSide = Double()
@State var value1 = Double()
@State var value2 = Double()

应用程序中有 4 个 slider ,可让每个变量相互独立地进行更改。我现在想要允许发生的是,更改变量 value1 也会根据用户设置的比率更新 value2。为了实现这一点,我相信我需要使用 Combine,但是我对该框架没有太多经验。

首先,我将变量移至 ObservableObject 类:

final class UserData: ObservableObject {
@Published var leftSide = Double()
@Published var rightSide = Double()
@Published var value1 = Double()
@Published var value2 = Double()
}

我用 @ObservedObject var userData = UserData() 更新了我的主视图,这样我就可以访问我 View 中的变量,这工作正常

现在我想在 value1 和 value2 变量发生变化时更新它们。从我所做的阅读来看,我认为我需要使用订阅者,但我找不到任何关于如何使用他们的 @Published 属性进行设置的信息。我是否以正确的方式解决了这个问题,或者是否有更好的方法来做到这一点?

最佳答案

I have 4 main variables at the moment, the left and right side of the ratio, and the first and second value that will be calculated in ratio

那么,为什么不将其声明为计算变量?

final class UserData: ObservableObject {
@Published var leftSide = 0.0
@Published var rightSide = 0.0
var value: Double {
// perform the calculation here
...
}
}

如果您想独立更改值(将其绑定(bind)到 SwiftUI 组件),并在修改 leftSide 或 rightSide 的情况下修改值,请使用 willSet 甚至 didSet

final class UserData: ObservableObject {
@Published var leftSide = 0.0 {
willSet {
// update value
value = f(newValue)
}
didSet {
// update value
value = f(oldValue)
}
}
@Published var rightSide = 0.0
@Published var value = 0.0
func f(_ v: Double)->Double {
......
}
}

关于ios - SwiftUI 和 Combine - 在另一个更改时更新 View 模型中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60421957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com