在 SwiftUI 中的 ForEach 中绑定

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

我使用

FetchRequest
来填充元素。然后我使用一个列表,并希望显示某种待办事项元素,您可以在其中看到哪些元素被选中,哪些元素未被选中。因此我创建了一个 CheckBoxView。

我现在的问题是,我需要将绑定传递给视图。但如何在 ForEach 中做到这一点呢? 如果我有一个绑定,这对我来说很容易,我只需生成一个

@State
就可以了。这里要怎么做呢?

List {
    ForEach(elements, id: \.self) { item in
        CheckBoxView(checked: item.checked)
    }
}

这是视图:

struct CheckBoxView: View {
    @Binding var checked: Bool
    ....
}
swift foreach binding swiftui fetchrequest
2个回答
4
投票

假设您的

elements
是项目数组的状态,它可以是

List {
    ForEach(elements.indices, id: \.self) { i in
        CheckBoxView(checked: $elements[i].checked)
    }
}

0
投票
ScrollView(.vertical, showsIndicators: false) {
    ForEach($elements, id: \.self) { element in
        CheckBoxView(checked: element.checked)
    }
}

//    Sometimes we need to use wrapped value of element For Example:

                ForEach($room.guests, id: \.self) { customer in
                    if let customerType = customer.wrappedValue.customerType {
                        VStack {
                            switch customerType {
                            case .newCustomer:
                                GuestSelectionView(customer: customer, isSelected: true, subtitle: Strings.Checkout.Text.NewGuest.title)
                            case .existingCustomer:
                                GuestSelectionView(customer: customer, isSelected: true, subtitle: Strings.Checkout.Text.ExistingGuest.title)
                            }
                        }
                        .sheet(isPresented: $isPresentingExistingGuestsList) {
                            CheckoutExistingCustomerView(isPresented: $isPresentingExistingGuestsList, guestChoosed: { newCustomer in
                                customer.wrappedValue = newCustomer
                            })
                        }
                    }
                }
© www.soinside.com 2019 - 2024. All rights reserved.