我用以下代码实现了一个定制的步进器:

struct ContentView: View {
    
    @State private var count: Int? = 0
    
    var body: some View {
        HStack {
            if let amount = count {
                Button {
                    count = amount - 1
                } label: {
                    Image(systemName: "minus")
                        .symbolVariant(.circle.fill)
                        .symbolRenderingMode(.palette)
                        .foregroundStyle(.background, .tint)
                }
                
                Text(amount.formatted())
                    .monospacedDigit()
                    .fixedSize()
                
                Button {
                    count = amount + 1
                } label: {
                    Image(systemName: "plus")
                        .symbolVariant(.circle.fill)
                        .symbolRenderingMode(.palette)
                        .foregroundStyle(.background, .tint)
                }
            }
        }
        .buttonRepeatBehavior(.enabled)
    }
}

我预计当我按住其中一个按钮时,计数器会反复增加或减少.但是,它只递增或递减一次.也就是说,如果我将count设置为非可选,并将操作更改为直接修改它,则一切都会按预期进行

在我的应用程序中,我的数据模型比能够重构条件更复杂,那么我如何才能做到这一点呢?

我已经try for each 按钮分配静态id,但无济于事

推荐答案

if中的视图提取到另一个视图:

struct MyStepper: View {
    @Binding var amount: Int
    
    var body: some View {
        Button {
            amount -= 1
        } label: { ... }
        
        Text(...)
        
        Button {
            amount += 1
        } label: { ... }
    }
}

ContentView中,您可以从count获得一个非可选绑定,如下所示:

HStack {
    if let amount = Binding($count) {
        MyStepper(amount: amount)
            .buttonRepeatBehavior(.enabled)
    }
}

Ios相关问答推荐

发生错误.请稍后重试.在 App Store 连接中

当虚拟对象附加到其网格时,如何刷新创建 ARView 的 SwiftUI UIViewRepresentable?

如何在集合视图中创建装饰视图?

Swift UI中如何为Text提供内部填充

比较 `某个协议` 实例时出现编译错误

当任何 TextEditor 有多于一行时,所有 TextEditor 都会调整大小

NavigationLink 只能在文本部分点击

Flutter Aging Person 自定义小部件

在 Swift 中 @MainActor 似乎被 withCheckedContinuation 而不是其他异步调用继承是巧合吗?

如何将 -fobjc-arc-exceptions 标志正确添加到 XCode 中?

SwiftUI:通过Sheet将数据添加到Realm DB时视图不更新

满足条件时 SwiftUI 动画背景 colored颜色 变化

JSONDecoder 在模拟器上运行良好时无法在真实设备上解码

在 iOS 中获取设备位置(仅限国家/地区)

在 Xcode 5 中为超级视图添加间距约束

向标签栏控制器添加新标签

在 iOS 7 上更改标签栏色调 colored颜色

SwiftUI NavigationView navigationBarTitle LayoutConstraints 问题

比较没有时间分量的 NSDates

如何在 iphone 屏幕中间显示活动指示器?