闽公网安备 35020302035485号
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 及以上才能使用,项目中真正用上还要再过几年。