如何在添加和删除行的同时防止Array崩溃?

敢于

我有这个circles数组,导致在随机位置创建圆,然后淡出。在淡出一个圆后,我需要完全删除它,这是通过在等于淡出动画结束的延迟后删除数组中的相应行来实现的。

只要我单击“添加圆圈”按钮的频率低于删除速度,它就可以正常工作。但是,当我继续快速按下它时,视图会因崩溃index out of range这似乎是算法感到困惑的结果:它通过索引标识要删除的行,但与此同时,其他行也可能已删除/添加,这意味着索引已经不同。

请参阅:

import SwiftUI

let screenW = UIScreen.main.bounds.size.width
let screenH = UIScreen.main.bounds.size.height

struct PlayGround: View {
    
    struct BlackCircle {
        var id = UUID()
        var position: CGPoint
        var opacity: Double = 1
    }
    
    @State var circles: [BlackCircle] = []
    
    
    var body: some View {
        ZStack {
            

            ForEach(Array(circles.enumerated()), id: \.1.id) {
                index, item in
                Circle()
                    .frame(width:30, height:30)
                    .position(item.position)
                    .opacity(item.opacity)
                    .onAppear {
                        
                        let animation = Animation.linear(duration: 1)
                        
                        withAnimation(animation) {
                            circles[index].opacity = 0
                        }
                        
                        DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                            circles.remove(at: index)
                        }
                            
                        
                    }
                
                
            }.frame(width: screenW, height:screenH)
            
            
            Button(action: {
                
                let randx = CGFloat.random(in: 30...screenW-30)
                let randy = CGFloat.random(in: 30...screenH-30)
                let randpos = CGPoint(x: randx, y: randy)
                
                circles.append(BlackCircle(position: randpos))
                

            }, label: {
                Text("Add a Circle")
            })
            
        }
    }
}

解决此问题的最简单,最省力的方法是在圆消失后才删除该行。当然,这既是优雅的又是低效的(可能最终导致数组中成千上万的无用行)。那么,当新元素一直被添加并被延迟删除时,我将如何防止数组崩溃呢?

谢谢!

尼克萨尔诺

如果问题是由于索引超出范围,请尝试根据ID(而不是索引)删除圆圈:

circles.removeAll { (existingCircle) -> Bool in
     return existingCircle.id == item.id
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何同时使用按钮添加和删除图像?

来自分类Dev

如何在每个动态行中添加添加和删除按钮?

来自分类Dev

Casbah MongoDB,如何在单个操作中同时向多个文档添加和删除数组的值?

来自分类Dev

如何在保持空行的同时用awk删除重复的行?

来自分类Dev

如何同时从Mongodb和表行中删除数据

来自分类Dev

如何在我的php行中添加更新,删除和查看按钮

来自分类Dev

如何在php的某些行的编辑和删除类之间添加空间(&nbsp)

来自分类Dev

如何在表格行鼠标事件上限制多个添加和删除类名

来自分类Dev

Bluemix和流量高峰-如何防止崩溃

来自分类Dev

Bluemix和流量高峰-如何防止崩溃

来自分类Dev

如何在保持顺序向下的同时防止MySQL数据库中的重复列行

来自分类Dev

如何防止引导程序在同一行折叠输入和 img 链接,同时跨越 100%

来自分类Dev

在矩阵中同时删除行和列

来自分类Dev

如何在添加用户名的同时向目录中的多个文件添加一行

来自分类Dev

SQLite-如何在保留子行的同时删除父行?

来自分类Dev

如何在保留至少一行的同时删除重复的MySQL表行

来自分类Dev

如何在Mojolicious中动态添加和删除路由?

来自分类Dev

如何在javascript中添加和删除对象?

来自分类Dev

如何在Angular中从数组添加和删除项目

来自分类Dev

如何在LiveData <List <Object >>中添加和删除<Object>?

来自分类Dev

如何在MongoDB Shell中添加和删除子文档?

来自分类Dev

如何在JavaScript中添加和删除图像上的边框

来自分类Dev

如何在单选按钮上添加和删除类?

来自分类Dev

如何在按钮点击时添加和删除类

来自分类Dev

如何在 MATLAB Gui 上添加和删除项目

来自分类Dev

如何在IntelliJ IDEA中删除添加的行颜色?

来自分类Dev

如何在文本文件中添加/删除行?

来自分类Dev

如何在 ReacjJS 中动态添加/删除表格行

来自分类Dev

如何在保留选项的同时删除optgroup

Related 相关文章

  1. 1

    如何同时使用按钮添加和删除图像?

  2. 2

    如何在每个动态行中添加添加和删除按钮?

  3. 3

    Casbah MongoDB,如何在单个操作中同时向多个文档添加和删除数组的值?

  4. 4

    如何在保持空行的同时用awk删除重复的行?

  5. 5

    如何同时从Mongodb和表行中删除数据

  6. 6

    如何在我的php行中添加更新,删除和查看按钮

  7. 7

    如何在php的某些行的编辑和删除类之间添加空间(&nbsp)

  8. 8

    如何在表格行鼠标事件上限制多个添加和删除类名

  9. 9

    Bluemix和流量高峰-如何防止崩溃

  10. 10

    Bluemix和流量高峰-如何防止崩溃

  11. 11

    如何在保持顺序向下的同时防止MySQL数据库中的重复列行

  12. 12

    如何防止引导程序在同一行折叠输入和 img 链接,同时跨越 100%

  13. 13

    在矩阵中同时删除行和列

  14. 14

    如何在添加用户名的同时向目录中的多个文件添加一行

  15. 15

    SQLite-如何在保留子行的同时删除父行?

  16. 16

    如何在保留至少一行的同时删除重复的MySQL表行

  17. 17

    如何在Mojolicious中动态添加和删除路由?

  18. 18

    如何在javascript中添加和删除对象?

  19. 19

    如何在Angular中从数组添加和删除项目

  20. 20

    如何在LiveData <List <Object >>中添加和删除<Object>?

  21. 21

    如何在MongoDB Shell中添加和删除子文档?

  22. 22

    如何在JavaScript中添加和删除图像上的边框

  23. 23

    如何在单选按钮上添加和删除类?

  24. 24

    如何在按钮点击时添加和删除类

  25. 25

    如何在 MATLAB Gui 上添加和删除项目

  26. 26

    如何在IntelliJ IDEA中删除添加的行颜色?

  27. 27

    如何在文本文件中添加/删除行?

  28. 28

    如何在 ReacjJS 中动态添加/删除表格行

  29. 29

    如何在保留选项的同时删除optgroup

热门标签

归档