SwiftUI使用ForEach的onDelete来删除列表视图的数据
文章摘要
HeoGPT
这篇文章主要介绍了在SwiftUI中使用ForEach的onDelete来删除列表视图的数据。作者以一个带有删除功能的列表视图为例子,解释了如何使用ForEach和onDelete来实现对列表中数据的删除操作。文章提供了详细的代码解释以及对代码中需要注意的几个细节进行了说明。
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
投诉我们常用Foreach来遍历数组生成一个列表视图,SwiftUI为我们提供了非常简单方便的删除方式。在看过其他人发布的代码里经常能看到无法使用数组直接remove的情况,这里介绍一个正确的使用方法。
界面样式
代码
1 | import SwiftUI |
说明
首先我们建立一个结构体,用于作为数据的类型
1 | struct NumberInfo { |
然后我们创建一个数组,数组里包含我们需要循环的数据
1 | private var numbers: [NumberInfo] = [ |
之后我们需要构建一个循环,因为我们需要对数据进行变更,所以我们直接遍历数组,而不是去遍历count
值
1 | VStack { |
这个时候我们会发现报错(结构“ForEach”要求“NumberInfo”符合“Hasable”)
1 | Generic struct 'ForEach' requires that 'NumberInfo' conform to 'Hashable' |
所以我们需要让NumberInfo
符合Hasable
协议
1 | struct NumberInfo: Hashable { |
之后我们需要添加一个函数,用于处理删除数据。这个函数需要接收一个IndexSet
类型的位置标记,用于告诉你应该去删除哪个数据。
使用数组中的<Array>.remove(atOffsets: <IndexSet>)
1 | func removeRows(at offsets: IndexSet) { |
现在我们只需要在ForEach
之后添加修饰
1 | .onDelete(perform: removeRows) |
就大功告成了!
- 感谢你赐予我前进的力量
打赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 张洪Heo
评论
生成评论
匿名评论
违规举报
✅ 你无需删除空行,直接评论以获取最佳展示效果