SwiftUI - Инкремент переменной в цикле ForEach - PullRequest
0 голосов
/ 17 октября 2019

У меня есть это в моем ContentView:

List {
    ForEach(items) { Item in
        ItemView(cellColor: self.$cellColor, title: item.title, orderId: "\(item.orderId)")
    }
}

Я хочу обновить переменную, скажем, добавив 1 к ней, на каждой итерации цикла, но я не могу получить SwiftUIсделать это. Примерно так:

var a: Int = 1
List {
    ForEach(toDoItems) { toDoItem in
        ToDoItemView(cellColor: self.$cellColor, title: toDoItem.title, orderId: "\(toDoItem.orderId)")
        a = a + 1
    }
}

Но это не работает. Извиняюсь, если я не задал это в правильном формате, это мой первый вопрос здесь!

1 Ответ

0 голосов
/ 17 октября 2019

Создайте функцию, которая возвращает желаемое представление в ForEach, а также увеличивает переменную.

struct ContentView: View {
    @State var a: Int = 1
    @State var cellColor: CGFloat = 0.0 // or whatever this is in your code
    var body: some View {
        List {
            ForEach(toDoItems) { toDoItem in
                self.makeView(cellColor: self.$cellColor, title: toDoItem.title, orderId: "\(toDoItem.orderId)")
            }
        }
    }
    func makeView(cellColor: Binding<CGFloat>, title: String, orderId: String) -> ToDoItemView {
        self.a += 1
        return ToDoItemView(cellColor: cellColor, title: title, orderId: orderId)
    }
}

Вы не указали типы cellColor, title и orderIdтак что я только что догадался из контекста остальной части вашего кода. Вы должны иметь возможность довольно легко корректировать типы, но если нет, укажите типы переменных в вашем вопросе или комментариях к этому посту, и я смогу обновить свой ответ (но я почти уверен, что правильно понял типы).

Редактировать : Очевидно, cellColor - это CGFloat, а не Color в соответствии с комментарием OP, поэтому я обновил свой код, чтобы отразить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...