Есть несколько полезных вопросов по этой теме, но все, что я обнаружил, используют устаревший синтаксис из более ранних бета-версий (например, BindableObject) или не требуют передачи привязки (например, к Toggle).
Я хочу создать список переключателей, которые связаны с элементами в массиве. Я перепробовал много методов, но синтаксис никогда не корректен. Версия ниже наиболее точно соответствует ответам на существующий вопрос .
struct Item: Identifiable {
var id: String { self.name }
var name: String
var enabled: Bool
}
final class ItemSet: ObservableObject {
@Published var items: [Item]
init() {
items = [
Item(name: "aaa", enabled: true),
Item(name: "bbb", enabled: false),
Item(name: "ccc", enabled: true)
]
}
}
var myItems = ItemSet()
struct ContentView: View {
@ObservedObject var items: ItemSet
var body: some View {
List {
ForEach(items.items) { item in
Toggle(item.name, isOn: $item.enabled)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(items: myItems)
}
}
Ошибка компилятора, которую я получаю в Xcode 11.1:
Использование неразрешенногоидентификатор '$ item'
в строке, где определен Toggle.
У меня сложилось впечатление, что каждый Item
сам по себе должен быть ObservableObject
с *Параметр 1018 *, но я также не смог заставить его работать, и все ответы на stackoverflow, кажется, говорят, что не следует делать Item
сам ObservableObject
.
Любая помощь будет высоко ценится.