SwiftUI中的ObjectBinding和List具有误导性错误

时间:2019-06-13 04:07:18

标签: swift swiftui

我正在尝试在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 个答案:

答案 0 :(得分:1)

您要将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) 
        }
    }
}