如何用Swift在非本地函数中切换()一个Bool?

wwtsj6pe  于 2023-05-21  发布在  Swift
关注(0)|答案(1)|浏览(109)

animateButton()作为local func工作得很好,但是当我将它移动到另一个swift文件中以在不同的Views上使用它时,它就坏了。
我在非本地函数中尝试了@State/@Bindingvar isPressed = isPressed,但它不工作。我也试过使用inout,但DispatchQueue似乎不喜欢它。

struct ContentView: View {
    @State private var isPressed = false

    var body: some View {
        Text("Tap on me")
            .onTapGesture { animateButton() }
        Button("I'm a button", action: {})
            .scaleEffect(isPressed ? 1.20 : 1)
            .animation(.easeInOut, value: isPressed)
    }

    private func animateButtom() {
        isPressed = true
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.20) {
            isPressed = false
        }
    }
}

你有什么想法,使它的工作作为一个non-local func?谢谢!

hrysbysz

hrysbysz1#

您需要将isPressed作为参数传递,并将该参数设置为Binding,以便函数中的更改将更新@State属性

func animateButton(_ isPressed: Binding<Bool>) {
    isPressed.wrappedValue = true
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.20) {
        isPressed.wrappedValue = false
    }
}

并将调用更改为

.onTapGesture { animateButton($isPressed) }

相关问题