Вводящая в заблуждение ошибка с ObjectBinding и List в SwiftUI - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь настроить базовый список в SwiftUI, но получаю ошибку времени компиляции, которая не имеет для меня особого смысла. Вот ошибка:

Невозможно преобразовать значение типа 'Текст' в тип результата закрытия '_'

Вот мой код:

final class MainViewModel: BindableObject {
    var didChange = PassthroughSubject<MainViewModel, Never>()

    var tasks = [Task]() {
        didSet {
            didChange.send(self)
        }
    }
}

struct MainView : View {
    @ObjectBinding var mainViewModel = MainViewModel()

    var body: some View {
        List($mainViewModel.tasks) { task in
            Text(task.title!) //compile time error here
        }
    }
}

Я думаю, что это, скорее всего, еще одна из вводящих в заблуждение ошибок SwiftUI, но я не могу понять, в чем собственно проблема. Я неправильно настраиваю привязку? Я что-то пропустил? Любая помощь будет оценена ...

1 Ответ

1 голос
/ 13 июня 2019

Вы передаете Binding в List.

Требуются данные, соответствующие Identifiable.

У вас есть два варианта здесь :

Либо вы заставляете Task соответствовать Identifiable, либо используете .identified(by:).

struct Task {
    let title: String
}

final class MainViewModel: BindableObject {
    var didChange = PassthroughSubject<MainViewModel, Never>()

    var tasks = [Task]() {
        didSet {
            didChange.send(self)
        }
    }
}

struct MainView : View {
    @ObjectBinding var mainViewModel = MainViewModel()

    var body: some View {
        // HERE
        List(mainViewModel.tasks.identified(by: \.title)) { task in
            Text(task.title) 
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...