macOS应用中.onDelete方法失效问题求助
macOS SwiftUI 中 .onDelete 失效的解决方法
核心原因:macOS 与 iOS 的删除触发逻辑不同
macOS 下 SwiftUI 的 List 默认没有 iOS 那样的左滑删除交互,需要通过以下方式触发删除:
- 选中列表项后按下键盘的
delete键 - 右键点击列表项,选择菜单中的「删除」选项
代码中的问题修正
- 变量名不匹配
工具栏按钮里使用了未定义的showingAddExpense,应改为已声明的AddNote,否则无法打开添加视图生成测试数据:
.toolbar { Button { AddNote = true } label: { Image(systemName: "plus") } }
- 确保数据模型遵循 Identifiable
ForEach要求遍历的元素必须遵循Identifiable协议,否则可能导致索引匹配错误。你的Note结构体需要类似这样的实现:
struct Note: Identifiable { let id = UUID() var name: String }
- 确认 ObservableObject 配置正确
Notes类需正确实现ObservableObject,且newNotes标记为@Published,保证删除操作后视图能自动刷新:
class Notes: ObservableObject { @Published var newNotes: [Note] = [] }
验证步骤
- 修正上述代码问题,运行应用后点击加号按钮添加几条测试笔记。
- 选中某条笔记,按下
delete键或右键选择删除,检查removeNote方法是否执行,列表是否更新。
内容的提问来源于stack exchange,提问作者jari85
相关产品推荐
相关产品推荐

