【问题标题】:When .onChange Picker modifier is called调用 .onChange Picker 修饰符时
【发布时间】:2021-03-19 05:35:58
【问题描述】:

我在我的 SwiftUI ContentView 中有关注 Picker

Picker("", selection: $approxType, content: {
    Text("Linear").tag(1)
    Text("Quadratic").tag(2)
    Text("Exponential").tag(3)
})
.pickerStyle(SegmentedPickerStyle())
.frame(width: 300, alignment: .leading)
.onChange(of: approxType, perform: { value in
    calculated = false
})

我想知道何时执行onChange 修饰符。好吧,似乎 ContentView 先刷新,然后才执行 onChange 闭包。我需要确保在刷新 ContentView 之前将 @State var calculated 设置为 false。我很感激任何提示。

【问题讨论】:

  • 更改 Picker 选择不应强制刷新整个 ContentView。我猜想在您看来,“计算”与其他事物的关联方式存在问题?如果你单独测试这段代码,它会正确执行。
  • 你不应该依赖改变状态的顺序 - 只对它们做出反应。
  • 我不认为我完全理解这个问题,但也许你正在寻找.onAppear

标签: swift swiftui onchange


【解决方案1】:

我需要确保在刷新 ContentView 之前将 @State var "calculated" 设置为 false

您可以在初始化时将其设置为 false:

@State private var calculated = false

但是,如果您想要与 onChange 相同的行为,但也希望在视图的第一次刷新时,您可以使用 onReceive 而不是 onChange

.onReceive(Just(approxType)) { approxType in
    calculated = false
}

注意:要让Just 工作,您需要先import Combine

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多