ios - SwiftUI - 从数组中删除项目导致 fatal error : Index out of Range

标签 ios swift xcode swiftui

我是 SwiftUI 的新手,我正在尝试构建一个 Image-Gallery,您可以在其中删除图像:

我的代码部分工作,当有更多元素时,我唯一无法删除的元素是最后一个。

奇怪的事情:当我只有一个元素时,我可以在一个 View 中删除它,而在另一个 View 中它会导致索引超出范围错误

这是我的代码

struct ImageSlider: View {
@Binding var images: [DefectImage]
@Binding var imagesTitels: [String]
@Binding var edit: Bool

var body: some View {
    ScrollView(.horizontal) {
        HStack {
            if self.images.count > 0 {
                ForEach(self.images) { img in
                    VStack {
                        if !self.edit {
                            DefImage(url: "", image: img.image)
                            Text(self.imagesTitels[self.getIdOfImg(img: img)])
                                .frame(width: 135)
                        }
                        else {
                            Button(action: {
                                self.imagesTitels.remove(at: self.getIdOfImg(img: img))
                                self.images.remove(at: self.getIdOfImg(img: img))
                            }){
                                DefEditImage(url: "", image: img.image)
                            }
                            .buttonStyle(PlainButtonStyle())

                            VStack {
                                TextField("", text: self.$imagesTitels[self.getIdOfImg(img: img)])
                                    .frame(width: 135)
                                    .offset(y: 6)
                                Rectangle()
                                    .frame(width: 135, height: 1.0, alignment: .bottom)
                                    .foregroundColor(Color.gray)
                            }
                        }
                    }
                }
            }
        }
    }
}



func getIdOfImg(img: DefectImage) -> Int {
    var countId: Int = 0
    for item in self.images {
        if img.id == item.id {
            return countId
        }

        countId += 1
    }

    return -1
}

错误:
Fatal error: Index out of range: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1103.2.25.8/swift/stdlib/public/core/ContiguousArrayBuffer.swift, line 444

错误不在数组之一中:
Screenshot of Error

最佳答案

为什么不尝试更改函数 getIdOfImg。
不使用 for 循环,而是使用

func getIdOfImg(img: String) -> Int {
    if let index = self.images.firstIndex(of: img) {
        return index
    } else {
        return -1
    }
}

并且还重写了 block
Button(action: {
    self.imagesTitels.remove(at: self.getIdOfImg(img: img))
    self.images.remove(at: self.getIdOfImg(img: img))
})


Button(action: {
    let index = self.getIdOfImg(img: img)
    if index > 0 && index < self.images.count {
        self.imagesTitels.remove(at: index)
        self.images.remove(at: index)
    }
})

关于ios - SwiftUI - 从数组中删除项目导致 fatal error : Index out of Range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61932245/

相关文章:

android - 开发共享的 Android/iOS 网络库

ios - 是否可以编辑视频音轨的音量和平移并使用该信息导出到独立视频?

ios - iOS 上 Safari 中 <select> 元素上消失的箭头和样式

objective-c - 将曲线拟合到一组点

arrays - 协议(protocol)扩展错误数组

ios - 如何通过标题的第一个字母创建字典但忽略 "the"或 "a/an"等文章

swift - 使用 Swift 枚举减少函数中的参数数量

ios - 查找 Xcode 项目的 ${PROJECT_DIR}

iphone - 从 AppDelegate 呈现特定的 View Controller

ios - 在iOS应用程序中存储用户每天提供的值?