【发布时间】:2021-11-03 10:04:53
【问题描述】:
我有一个任务项目的列表视图。每 10 秒一个计时器触发函数 randomTasks 负责修改列表中每个任务的标题和描述,但 ListView 不反映更改。我尝试使用 objectWillChange.send() 但它不起作用.
我注意到,当使用不同的 id 修改任务时,ListView 会更新,我可以看到更改,但是当我在详细视图中时,只要触发 randomTaskTitle,视图就会自动关闭。
class Task {
var id: String = UUID().uuidString
var title: String
var description: String
init(title: String, description: String) {
self.title = title
self.description = description
}
}
import SwiftUI
struct TasksView: View {
@EnvironmentObject var viewModel: TasksViewModel
let timer = Timer.publish(every: 10, on: .main, in: .common).autoconnect()
var body: some View {
NavigationView {
List {
ForEach(viewModel.tasks, id: \.id) { task in
NavigationLink(
destination: DetailView(task: task)
) {
VStack {
Text(task.title)
Text(task.description)
}
}
}
}
.onReceive(timer) { time in
Task {
await viewModel.randomTasks()
}
}
}
}
struct TasksViewNew_Previews: PreviewProvider {
static var previews: some View {
TasksView()
}
}
import Foundation
@MainActor
class TasksViewModel: ObservableObject {
@Published var tasks = [Task]()
init() {
self.tasks = [Task(title: "TaskA", description: "DescriptionA"),
Task(title: "TaskB", description: "DescriptionB"),
Task(title: "TaskC", description: "DescriptionC"),
Task(title: "TaskD", description: "DescriptionD"),]
}
func randomTasks() {
tasks.forEach { task in
task.title = randomTitleTask()
task.description = randomDescriptionTask()
}
}
}
【问题讨论】: