struct ContentView: View { @State var bool = false var body: some View { VStack { Button { print("点击了按钮") bool.toggle() } label: { Text("点我!") } .sensoryFeedback(.success, trigger: bool) } .padding() } }sensoryFeedback 修饰器有两个参数,第一个是反馈的类型,这里我填写的是成功反馈,第二个参数 trigger 是一个 Equatable 的泛型,代表触发值,只要这个值有变化,就会有反馈。
impact,影响反馈,适用于 iOS 和 watchOS
struct ContentView: View { @State var bool = false var body: some View { VStack { Button { print("点击了按钮") bool.toggle() } label: { Text("点我!") } .sensoryFeedback(.impact(weight: .medium, intensity: 0.5), trigger: bool) } .padding() } }其他使用方式
struct ContentView: View { @State var isSucceeded = false var body: some View { VStack { Button { print("点击了按钮") isSucceeded.toggle() } label: { Text("点我!") } .sensoryFeedback(trigger: isSucceeded) { old, new in return new ? .success : .error } } .padding() } }上边的代码中,我们定义了一个 isSucceeded 的 Bool 值来代表成功或者失败,在 sensoryFeedback 函数中如果成功了就展示成功反馈,如果失败了就展示失败反馈。另外也可以通过另一个 sensoryFeedback 的变体来灵活的控制是否需要反馈:
struct ContentView: View { @State var isSucceeded = false var body: some View { VStack { Button { print("点击了按钮") isSucceeded.toggle() } label: { Text("点我!") } .sensoryFeedback(.error, trigger: isSucceeded) { oldValue, newValue in return newValue == false } } .padding() } }这个例子展示了只有失败的情况下才展示失败反馈。不得不说,SwiftUI 的新功能既强大,又方便,唯一不友好的是 iOS 17 及以上才能使用,项目中真正用上还要再过几年。