在使用SwiftUI显示/隐藏视图的过程中发现,当添加hidden尝试隐藏视图时:
.background {
ZStack {
Color.gray.opacity(0.3)
Image(systemName: "plus.magnifyingglass")
.foregroundColor(.white)
}
.hidden(hoveringIndex != index)
Xcode就会卡死在编译的状态。

经查询发现,这是SwiftUI 编译器的一个已知 Bug(特别是对 .hidden(condition) 扩展的调用解析不佳),尤其在 macOS 的复杂嵌套结构里容易触发。
因此,可以使用 opacity(…) 替代 hidden:
.opacity(hoveringIndex == index ? 1 : 0)
.animation(nil, value: hoveringIndex) // 禁用动画,防止 transition 造成 rebuild
或者使用ZIndex切换视图,防止视图重建:
ZStack {
Image(nsImage: item.image)
.resizable()
.scaledToFill()
.frame(width: 35, height: 35)
Group {
Color.gray.opacity(0.3)
Image(systemName:"plus.magnifyingglass")
.foregroundColor(.white)
.allowsHitTesting(false)
}
.frame(width: 35, height: 35)
.zIndex(hoveringIndex == index ? 1 : -1) // 根据 hoveringIndex 设置 zIndex 层级
}
这两种方法都可以替代hidden。