【发布时间】:2020-10-04 20:40:33
【问题描述】:
我注意到使用 swiftUI 的 withAnimation{} 的 XCode 有一个奇怪的行为。
我创建了以下工作示例:
import SwiftUI
class Block: Hashable, Identifiable {
// Note: this needs to be a class rather than a struct
var id = UUID()
static func == (lhs: Block, rhs: Block) -> Bool {
lhs.id == rhs.id
}
func hash(into hasher: inout Hasher) {
hasher.combine(self.id)
}
}
struct ContentView: View {
@State private var blocks: [Block]
init() {
var blocks = [Block]()
/// generate some blocks here
blocks.append(Block())
blocks.append(Block())
blocks.append(Block())
self._blocks = State(initialValue: blocks)
}
var body: some View {
VStack {
ForEach(blocks, id: \.self) { block in
BlockRow(block: block) { b in
print("COMMENT THIS LINE OUT") // try commenting out this line -> XCODE won't build anymore
withAnimation {
self.blocks.remove(at: self.blocks.firstIndex(of: b)!)
}
}
}
}
}
}
struct BlockRow: View {
@State var block: Block
var onDelete: (Block) -> Void = {_ in}
var body: some View {
Text("<Block>")
.onTapGesture {
print("Tap block \(block.id)")
self.onDelete(block)
}
}
}
上面的例子按预期工作,如果你点击它被删除的块之一,下面的块将很好地滑动到空闲位置。
但是XCode在这里产生警告,我不明白:
调用“withAnimation”的结果未使用
事情变得更加混乱:只需事先注释掉 print stamenet withAnimation 块/* print("COMMENT THIS LINE OUT") */ XCode 将不再构建项目:
无法生成表达式诊断;请提交错误报告
这是一个错误还是我的方法完全偏离了道路?
【问题讨论】: