微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swiftui - 删除列表行 信息

如何解决Swiftui - 删除列表行 信息

我想删除列表的行。

我已经按照 Apple 的官方 SwiftUI 教程构建了我的应用程序的这一部分。如果您愿意,您可以从 https://developer.apple.com/tutorials/swiftui/handling-user-input 下载 SwiftUI Essentials - 处理用户输入


我正在使用 onDelete 修饰符删除行。

        ForEach(filteredLandmarks) { landmark in
            NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
                LandmarkRow(landmark: landmark)
            }
        }
        .onDelete(perform: { indexSet in
            for index in indexSet {
                self.modelData.landmarks.remove(at: index)
            }
        })

只要您不导航到 LandmarkDetail 视图,它就可以工作。如果您这样做,应用程序会因 Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value 而崩溃。这是因为正如您在以下代码中看到的那样,firstIndex 被强制解包。

struct LandmarkDetail: View {
    @EnvironmentObject var modelData: ModelData
    
    var landmark: Landmark

    var landmarkIndex: Int {
        modelData.landmarks.firstIndex(where: { $0.id == landmark.id })!
    }

    var body: some View {
      FavoriteButton(isSet: $modelData.landmarks[landmarkIndex].isFavorite)
    }
}

我不知道如何允许在 Landmark 中编辑 LandmarkDetail 以及如何删除它。


信息

为了测试,点击一行以导航到 LandmarkDetail,然后导航回 LandmarkList。然后删除您刚刚点击的行。

解决方法

问题是您正在从 modelData 中删除索引,但是您正在将 landmark 对象从 filteredLandmarks 变量发送到 LandmarkDetail 视图(该对象在 filteredLandmarks 中仍然可用) {1}})。因此,在 LandmarkDetail 视图中,“modelData”不包含您提供的“landmark”变量。

LandmarkDetail 视图中:

var landmarkIndex: Int {
    guard let index = modelData.landmarks.firstIndex(where: { return $0.id == landmark.id }) else {
        return 0
    }
    return index
}

或,

您可以尝试找出从 filteredLandmarks 变量中删除确切行索引的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?