节拍器 SwiftUI,每当更改@State var 时更改计时器间隔

Metronome SwiftUI, Change timer interval whenever the @State var is changed

我正在使用 swiftUI 构建节拍器

我有一个连接到滑块的@State 变量。

@State private var period: Double
Slider(value: period, in: 0.25...5, step: 0.25)
          

现在只有重启节拍器才能重新设置时间间隔

Button(action: { startStop = !startStop
    self.timer = Timer.publish(every: self.period, on: .main, in:.default).autoconnect()
            } ){
                Text("START/STOP")
            }

但是,我想在滑块移动时触发“self.timer = Timer.publish(....”。有没有办法在@时触发 ObservableObject @Published var状态变量改变了吗?这样我就可以使用“.onReceive()”函数来触发“self.timer = Timer.publish(....”

谢谢

@State 值更改时执行代码的最简单方法是将 onChange 修饰符添加到您定义 @State 的视图的子视图,例如:

struct ContentView: View {
    @State private var period: Double = 0.5

    var body: some View {
        Slider(value: period, in: 0.25...5, step: 0.25)
          .onChange(of: period) { newValue in
            // perform your code here
          }
    }
}

另见 Apple's documentation and an example on Hacking With Swift