SwiftUI перестает показывать обновления списка после перемещения элемента FetchRequest в его собственную структуру View - PullRequest
0 голосов
/ 10 ноября 2019

Это работало:

ForEach(todoLists, id: \.self) {todoList in
    NavigationLink(destination: TodoItemView(todoList: todoList), label: {
        HStack {
            if (todoList.countChecked == todoList.countTotal) {
                Text(todoList.title!)
                    .foregroundColor(stringToColor(string: todoList.color!))
                    .strikethrough()
            }
            else {
                Text(todoList.title!)
                    .foregroundColor(stringToColor(string: todoList.color!))
            }
            Spacer()
            Text(String(todoList.countChecked) + " / " + String(todoList.countTotal))
                .foregroundColor(.gray)
                .font(.footnote)
        }
    })
}

Так что я переместил часть этого в свою собственную структуру View, потому что компилятор Xcode начал spazzing:

struct TodoListLabel: View {
    var todoList: TodoList

    var body: some View {
        HStack {
            if (todoList.countChecked == todoList.countTotal) {
                Text(todoList.title!)
                    .foregroundColor(stringToColor(string: todoList.color!))
                    .strikethrough()
            }
            else {
                Text(todoList.title!)
                    .foregroundColor(stringToColor(string: todoList.color!))
            }
            Spacer()
            Text(String(todoList.countChecked) + " / " + String(todoList.countTotal))
                .foregroundColor(.gray)
                .font(.footnote)
        }
    }
}

Теперь у меня есть это:

ForEach(todoLists, id: \.self) {todoList in
    NavigationLink(destination: TodoItemView(todoList: todoList), label: {
        TodoListLabel(todoList: todoList)
    })
}

Проблема в том, что, поскольку я переместил его в свою собственную структуру View, симулятор больше не отображает изменения в списке, как это было раньше, когда я вносил изменения в список или любые его связи.

1 Ответ

0 голосов
/ 10 ноября 2019

Вы должны передать свой TodoList в TodoListLabel как @Binding.

struct TodoListLabel: View {
    @Binding var todoList: TodoList

    var body: some View {
    // etc.
}

и затем инициализировать его следующим образом:

TodoListLabel(todoList: $todoList)

Таким образом SwiftUI будет знать, что нужно TodoListLabelбудет перерисовываться каждый раз при изменении элемента TodoList.

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