【问题标题】:NavigationLink binding issueNavigationLink 绑定问题
【发布时间】:2023-03-12 19:26:01
【问题描述】:

我对 Swift 和开发都是 100% 全新的。我已经阅读了几本书,我开始明白了,但我可能犯了一些愚蠢的错误。

问题是我有一个显示 Measurements() 集的列表,我正在尝试获取 NavigationLink,因此当触摸发生时,EditMeasurementView 会打开。我不确定我做错了什么。

这里是 EditMeasurementView:

struct EditMeasurementView: View {
    @Binding var measurements: Measurements

    var body: some View {
        Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
    }
}

struct EditMeasurementView_Previews: PreviewProvider {
    static var previews: some View {
      //EditChecklistItemView(checklistItem: .constant(ChecklistItem(name: "Sample item")))
          EditMeasurementView(measurements:  .constant(Measurements()))
    }
}

这里是内容视图:

import SwiftUI

struct ContentView: View {

    @ObservedObject var measurements = Measurements()
    @State var newMeasurementViewIsVisible = false

    var body: some View {
        NavigationView {
            List {
                ForEach(measurements.items) { MeasurementItem in
                    NavigationLink(destination: EditMeasurementView(measurements: $measurements)) {
                        HStack {
                            Text("\(MeasurementItem.mdate)")
                            Spacer()
                            Text("\(MeasurementItem.weight)" + " lbs")
                        }
                    }
                }
                .onDelete(perform: measurements.deleteListItem)
                .onMove(perform: measurements.moveListItem)
            }
            .navigationBarTitle("Measurements", displayMode: .inline)
            .navigationBarItems(
                leading: Button(action: { self.newMeasurementViewIsVisible = true
                  }) {
                    HStack {
                      Image(systemName: "plus.circle.fill")
                      Text("New")
                    }
                  },
                  trailing: EditButton()
            )
        }
        .sheet(isPresented: $newMeasurementViewIsVisible) {
            NewMeasurementItemView(measurements: self.measurements)
        }
    }
} 


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

swift 抛出的错误是:

Cannot convert value of type 'ObservedObject<Measurements>.Wrapper' to
expected argument type 'Binding<Measurements>'" on the NavigationLink
line in ContentView.

【问题讨论】:

  • EditMeasurementView 是做什么用的?是编辑List中的单个测量项吗?
  • 正确。另一个列表最终用于编辑单个测量项的值。
  • 好的,我想我可能有你想要的解决方案。但是您实际上想用EditMeasurementView 做什么?从列表中删除一个元素,或者例如更改它?
  • 我希望能够在此处修改现有值,即在之前添加新项目时更正错字。
  • @George_E 仅供参考-如果您查看我的编辑,我就知道了。感谢您的帮助!

标签: swift swiftui-navigationlink


【解决方案1】:

/// 想通了! ///

在 EditMeasurementView 中,我绑定到了错误的对象。我应该绑定到 MeasurementItem 而不是 Measurements。 Measurements 是包含 MeasurementItems 的数组,但这里我只编辑一组 MeasurementItems。

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    相关资源
    最近更新 更多