.onChange(of: ) 一次用于多个 @State 属性?

Joe*_*tto 7 ios swift swiftui

有没有一种方法可以用来同时.onChange检测多个属性的变化?@State我知道我可以只链接 2 个.onChange修饰符,但如果我可以一次检测所有修饰符并运行一些代码,那就更好了。

@State private var width = 0.0
@State private var height = 0.0

var body: some View {
    Button(action: {
        width += 0.1
    }, label: {
        Text("Width + 0.1")
    })
    .onChange(of: width) { _ in 
        print("Changed")
    }
}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 9

对于这种情况,这是我认为最简单的

.onChange(of: width + height) { _ in
    print("Changed")
}
Run Code Online (Sandbox Code Playgroud)

更新:正如我上面写的那样,它是“最简单的”(对于特定场景来说就足够了),但当然也可以使用其他变体,“更智能/重型/通用/等”。

感谢@AgentBilly,这是其中之一:

.onChange(of: [width, height]) { _ in
    print("Changed")
}
Run Code Online (Sandbox Code Playgroud)

  • @Asperi 如果它们都改变了,但总和保持不变,这仍然有效吗? (2认同)
  • 根据@cora提到的,我认为使用数组而不是它们的总和会更好。 (2认同)