SwiftUI Stepper不会影响基础绑定

问题描述

晚上好

在我当前的项目中,我正在如下所示的ForEach-Loop中创建

    ForEach(self.viewModel.dailyNutritionReports[self.selectedReportIndex].dailyNutritionReportElementMO,id: \.self) { element in
       ReportElementItem(
       viewModel: self.viewModel,element: element,selectedReportIndex: self.selectedReportIndex
    )

然后在视图本身中有一个步进器:

Stepper(
         "",value: self.getStepperBinding(),in: 0...9,step: 0.25
       )

我使用自定义绑定,因为我需要将更改保存在CoreData中:

private func getStepperBinding() -> Binding<Double> {
    Binding<Double>(
        get: { self.element.amount },set: {
            self.element.amount = $0
            self.viewModel.updateDailyNutritionReportElement(element: element)
        }
    )
}

然后在视图中尝试显示步进值(element.amount),如下所示:

Text("\(element.amount)")

总计视图如下:

struct ReportElementItem: View {
@ObservedObject var viewModel: HomeViewVielModel
@State var element: DailyNutritionReportElement
@State private var isChecked: Bool = false
var selectedReportIndex: Int
@Environment(\.colorScheme) var colorScheme: ColorScheme

var body: some View {
    let background = colorScheme == .dark ? Color.secondarySystemBackground : Color.systemBackground
    return ZStack {
        background
        .overlay(RoundedRectangle(cornerRadius: 15).stroke(Color.quaternaryLabel))
        HStack {
            ZStack {
                Circle().frame(width: 100,height: 100,alignment: .center)
                    .foregroundColor(colorScheme == .dark ? Color.quaternarySystemFillSystemFill : Color.systemFill)

                VStack(alignment: .center) {
                    Image(element.dailyNutritionReportElementTypeMO.dailyNutritionReportElementTypeIconMO.imageName)
                    .resizable()
                        .frame(width: 60,height: 60,alignment: .center)
                }
                .padding()
            }

            Spacer()
            if element.dailyNutritionReportElementTypeMO.dailyNutritionReportElementUnitMO.abbreviation != "Y/N" {
                VStack(spacing: 10) {
                    Text(element.dailyNutritionReportElementTypeMO.typeDescription)
                        .multilineTextAlignment(.leading)
                        .foregroundColor(Color.label)
                        .font(.system(size: 20))
                    HStack(alignment: .center) {
                        Text("\(String(format: "%.2f",self.element.amount))")
                        Text("von")
                        Text("\(String(format: "%.2f",element.dailyNutritionReportElementTypeMO.dailyTarget))")
                        //Text(element.dailyNutritionReportElementTypeMO.dailyNutritionReportElementUnitMO.name)
                    }
                    Stepper(
                        "",step: 0.25
                    )
                    .labelsHidden()
                }
                Spacer()
            }
        }
    }
    
    private func getStepperBinding() -> Binding<Double> {
            Binding<Double>(
                get: { self.element.amount },set: {
                    self.element.amount = $0
                    print(element.amount)
                    self.viewModel.updateDailyNutritionReportElement(element: element)
                }
            )
        }
}

}

但是,按任何步进按钮,都不会对我的文本和底层CoreData值产生任何影响。在我的绑定的set部分上放置一个断点告诉我,从未调用此部分。

我已经尝试过将元素的索引传递到视图而不是元素,并使用带有onIncrementonDecrement方法的Stepper,但是没有任何方法可以解决问题。

有人可以告诉我我的错误是什么吗?

谢谢你们!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...