PreviewProvider 中的 SwiftUI 状态不起作用

问题描述 投票:0回答:1

我有一个简单的按钮,可以按预期在模拟器上工作,形状随着点击而改变;

struct ButtonTest: View {
    @State var isLiked = true
    var body: some View {

        VStack {
            LikeButtonSimple( action: toggleLiked, isLiked: $isLiked)
        }
    }
    func toggleLiked() {
    
        isLiked.toggle()
        print("Liked Button: \(isLiked)")
    }
}

struct LikeButtonSimple: View {
    
    let dimen = 50.0
    let dimenHalf = CGFloat(28)
    
    var action: () -> Void?
    
    @Binding var isLiked : Bool

    var body: some View {
        ZStack {
            Circle()
                .frame(width: dimen, height: dimen)
                .foregroundColor(.white )
                .shadow(color: .black, radius: 2, y: 2)
            Button( action: {
               action()
            }
            ) {
                Image(systemName: isLiked ? "heart.fill" : "heart")
                    .resizable()
                    .foregroundColor(isLiked ? .red : .gray)
                    .frame(width: dimenHalf, height: dimenHalf)
            }
        }
    }
}

我也想在

Preview
上看到相同的行为,并为此写下了以下内容;

struct LikeButtonSimple_Previews: PreviewProvider {

    @State static var isLiked = true

    static func toggleLiked() {

        isLiked.toggle()
    }

    static var previews: some View {
        LikeButtonSimple( action: toggleLiked, isLiked: $isLiked)

    }
}

按钮不再切换。我们可以使用这个 PreviewProvider 在 Preview 上工作吗?

swiftui preview swiftui-button swiftui-state
1个回答
0
投票

我觉得你根本不需要这里的动作

绑定是与某些数据的双向连接。

通过使用绑定,您传递给它的视图可以对其进行更新。

所以你不需要结合和行动。按钮动作应该只是……

isLiked.toggle()

这足以更新视图和更新“父”视图中的值。

© www.soinside.com 2019 - 2024. All rights reserved.