考虑以下代码,它在视图的.background
修饰符中放置了波动的CatView
:
@State private var catOn = true
...
SomeView()
.background {
GeometryReader { geo in
ForEach(0...numCats, id: \.self) { n in
CatView(color: n%2 == 0 ? color1 : color2, size: 15, isOn: n%2 == 0 ? catOn : !catOn)
//.frame = ...
}
.task {
while !Task.isCancelled {
try? await Task.sleep(for: .seconds(1.0))
catOn.toggle()
}
}
}
}
问题是,当视图被另一个视图替换时,我认为这段代码有时会导致崩溃,这可能是因为任务在过渡期间触发(当我注释掉.task
时,我没有看到崩溃).在触发转移此视图的属性之前,当按下按钮时,如何取消此任务?还有,有没有更好的方法来设置这个任务?如你所见,我需要CatViews每秒交换 colored颜色 .