Связывание строк SwiftUI с помощью ForEach? - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь связать массив строк в соответствующие текстовые поля в списке прокрутки. Количество строк является переменным и соответствует количеству элементов в массиве строк. Пользователь может добавлять или удалять строки, а также изменять текст в каждой строке.

Следующий код Playground является упрощенной версией того, чего я пытаюсь достичь.

import SwiftUI
import PlaygroundSupport


struct Model {
    struct Row : Identifiable {
        var textContent = ""
        let id = UUID()
    }
    var rows: [Row]
}


struct ElementCell: View {
    @Binding var row: Model.Row
    var body: some View {
        TextField("Field",text: $row.textContent)
    }
}


struct ElementList: View {
    @Binding var model: Model
    var body: some View {
        List {
            ForEach($model.rows) {
                ElementCell(row: $0)
            }
        }
    }
}


struct ContentView: View {
    @State var model = Model(rows: (1...10).map({ Model.Row(textContent:"Row \($0)") }))
    var body: some View {
        NavigationView {
            ElementList(model: $model)
        }
    }
}


PlaygroundPage.current.liveView = UIHostingController(rootView: ContentView())

Проблема в том, что я не могу заставить "ячейку" правильно связываться с соответствующим элементом. В приведенном выше примере кода Xcode 11.1 не удалось скомпилировать его с ошибкой в ​​строке 26:

error: Text-Field Row.xcplaygroundpage:26:13: error: cannot invoke initializer for type 'ForEach<_, _, _>' with an argument list of type '(Binding<[Model.Row]>, @escaping (Binding<Model.Row>) -> ElementCell)'
            ForEach($model.rows) {
            ^

Text-Field Row.xcplaygroundpage:26:13: note: overloads for 'ForEach<_, _, _>' exist with these partially matching parameter lists: (Data, content: @escaping (Data.Element) -> Content), (Range<Int>, content: @escaping (Int) -> Content)
            ForEach($model.rows) {
            ^

Каков рекомендуемый способ привязки элементов, являющихся результатом ForEach, к его родительской модели?

...