无法使用触觉反馈 Swift

Cannot get Haptic Feedback to work with Swift

我是大学计算机科学专业的学生,​​有一个 Apple Watch 应用程序的想法,该应用程序在每次达到特定时间间隔时都会振动,例如用户通过选择器选择 20 秒的间隔,点击“开始”,然后该应用程序启动一个从 0 到 20 的计时器,一旦它达到 20 我希望手表振动 并再次开始计数到 ​​20,直到用户选择停止它。我想用它来让 运行 的人了解 运行 的一致步调。问题是我无法让 UIImpactFeedbackGenerator 工作,也无法让其他触觉反馈方法 none 工作。我没有 swift 经验,只有 python 和 Java 但我基本上完成了这个触觉部分。我得到的一个错误是 UIImpactFeedbackGenerator 超出了生成器在 SecondView 下声明的范围。先感谢您!这是我的代码:

import SwiftUI
    

struct ContentView: View {
    @State var timerScreenShown = false
    @State var timeVal = 10
    
    var body: some View {
        VStack{
            Text("Select \(timeVal)s intervals").padding()

            Picker(
                selection: $timeVal,
                label: Text("")){
                    ForEach(10...120, id: \.self) {
                        Text("\([=11=])")
                    }
                }
            
            NavigationLink(destination: SecondView(timerScreenShown: $timerScreenShown, timeVal: timeVal), isActive: $timerScreenShown, label: {Text("Go")})
            
        }
    }
}

struct SecondView: View{
    @Binding var timerScreenShown:Bool
    @State var timeVal = 10
    @State var startVal = 0
    
    var body: some View {
        VStack{
            if timeVal > 0 {
                Text("Timer")
                    .font(.system(size: 14))
                Text("\(startVal)")
                    .font(.system(size: 40))
                    .onAppear(){
                        Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
                            if self.timeVal > 0{
                                self.startVal += 1
                                if self.timeVal == self.startVal{
                                    
                                    let generator = UIImpactFeedbackGenerator(style: .medium)
                                    generator.impactOccurred()
                                    
                                    self.startVal = 0
                                }
                            }
                        }
                    }
                Text("seconds")
                    .font(.system(size: 14))
                Button(action: {
                    self.timerScreenShown = false
                }) {
                    Text("Cancel")
                        .foregroundColor(.red)
                }
            } else {
                Button(action: {
                    self.timerScreenShown = false
                }) {
                    Text("Done")
                        .foregroundColor(.green)
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            ContentView()
            ContentView()
        }
    }
}

WatchOs 确实有 play(_:) - 通知方法。

尝试WKInterfaceDevice.current().play(.click)

有关更多信息,请查看文档 -- https://developer.apple.com/documentation/watchkit/wkinterfacedevice/1628128-play