繁体   English   中英

SwiftUi- 无法将 Binding<[ExercisePlan]>.Element 类型的值转换为预期的参数类型 Binding<[ExercisePlan]>

[英]SwiftUi- Cannot convert value of type Binding<[ExercisePlan]>.Element to expected argument type Binding<[ExercisePlan]>

我正在尝试创建一个指向另一个视图 (ExercisePlanDetailView) 的 NavigationLink,它要求我将 @State var exercisePlan 作为绑定 var 传递,但它一直给我这个错误。 我在 ExercisePlan Detail 视图中也有一个 @Binding var。

运动计划视图:

`

import SwiftUI

struct ExercisePlanView: View {
    
    @State var isSheetPresented = false
    @State var exercisePlan = [
        ExercisePlan(title: "Exercise Plan 1", details: "Choose this for a light and basic workout", exercise:
        Exercise(title: "Toe touches and Arm Stretches", duration: 5), exercise2: Exercise(title: "ArmCircles", duration: 5), exercise3: Exercise(title: "Calf Raises", duration: 5), exercise4: Exercise(title: "Jog on the Spot", duration: 5)
        ),
        ExercisePlan(title: "Exercise Plan 2", details: "Choose this for a medium difficulty workout", exercise: Exercise(title: "High Knee March", duration: 5), exercise2: Exercise(title: "Stair Exercise", duration: 10), exercise3: Exercise(title: "Chair Exercise", duration: 5), exercise4: Exercise(title: "Lunges", duration: 5)),
//        ExercisePlan(title: "Exercise Plan 2", details: "Choose this plan for a more intermediate set of workouts", exercise: Exercise(title: "Wall Push-ups", duration: <#T##Int#>), exercise2: <#T##Exercise#>, exercise3: <#T##Exercise#>, exercise4: <#T##Exercise#>)
   ]

    var body: some View {
        
        let row = GridItem(.fixed(50), spacing: 20, alignment: .center)
        
        ScrollView(.horizontal) {
                LazyHGrid(rows: [row]) {
                    ForEach($exercisePlan) { $exercisePlan in
                        NavigationLink {
                            ExercisePlanDetailView(exercisePlan: $exercisePlan)
                                .frame(maxWidth: .infinity, maxHeight: .infinity)
                        } label: {
                            Text(exercisePlan.title)
                                .foregroundColor(.black)
                                .frame(width: 120, height: 130)
                                .padding()
                                .background((Color(red: 220/255, green: 247/255, blue: 99/255)))
                                .cornerRadius(10)
                        }
                        
                    }
//                    .sheet(isPresented: $isSheetPresented) {
//                        ExercisePlanDetailView(exercisePlan: $exercisePlan)
                }
                
            }
            
        }
    }
        

        struct ExercisePlanView_Previews: PreviewProvider {
            static var previews: some View {
                ExercisePlanView()
            }
        }

`

ExercisePlanDetailView:

import SwiftUI

struct ExercisePlanDetailView: View {
    @Binding var exercisePlan: [ExercisePlan]
    var body: some View {
            VStack {
                Text($exercisePlan.title)
            }
        }
    }
    

struct ExercisePlanDetailView_Previews: PreviewProvider {
    static var previews: some View {
        ExercisePlanDetailView(exercisePlan: .constant([]))
    }
}

尝试这种方法,您只将所需的 exercisePlan 传递给详细信息视图,而不是整个数组:

ExercisePlanView

ForEach($exercisePlan) { $plan in
//..
ExercisePlanDetailView(exercisePlan: $plan)
//...
            

ExercisePlanDetailView

@Binding var exercisePlan: ExercisePlan
 //...
 Text(exercisePlan.title)
 //...

并在ExercisePlanDetailView_Previews

  ExercisePlanDetailView(exercisePlan:.constant(ExercisePlan(title:....)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM