Swift UI onDelete函数
Swift UI onDelete函数

Swift UI onDelete函数

本文的内容为介绍Swift UI 的 onDelete函数,实际操作中列表的delete删除方式以及梳理整个删除流程。

首先,我们需要知道的是,onDelete()是List提供的一个删除交互方式,它可以让用户通过滑动手势删除某一行对应的元素。

实际的删除代码如下:

func removeRows(at offsets: IndexSet) {
    expenses.items.remove(atOffsets: offsets)
}

List {
    // 使用 id: \.name
    ForEach(expenses.items, id: \.name) { item in
        Text(item.name)
    }
    .onDelete(perform: removeRows)
}

实现的流程为:

1、当用户在ForEach列表上滑动删除某一行时,Swift UI会捕获并识别出用户想要删除的内容,并且会将它的索引(IndexSet)传递给removeRows(at:)函数。

    这里我们并没有显式的看到索引(IndexSet),这是因为它是在后台由.onDelete自动处理的。

    2、removeRows(at:)函数被调用后,会接收用户想要删除的内容的索引,然后调取remove(atOffsets:)方法从数组中删除对应的项目。

    1)首先,removeRows的at也是由后台.onDelete自动处理的,所以没有看到显示的传递。

    2)其次是,IndexSet是Swift标准库中的一个类型,用于表示一组索引。它可以包含一个或多个整数值,通常用来标识集合或数组中的索引为止。在删除操作中,IndexSet可能标识需要删除的多个元素的位置。

    func removeRows(at offsets: IndexSet) {

    3)remove(atOffsets:)是Swift UI提供的一个数组扩展方法,用于从数组中删除多个元素,传入的参数是IndexSet。

    所以,假设我们的列表中要删除[2,4]索引的元素,那么首先Swift UI会识别删除的内容索引,并将[2,4]索引传递给.onDelete处理。onDelete会调取remove(atOffsets:)方法,删除对应的索引元素。

    如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

    发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注