【问题标题】:How do I properly create a multidimensional array in swift?如何在 swift 中正确创建多维数组?
【发布时间】:2023-03-08 09:14:01
【问题描述】:

我创建了一个多维数组,但是一旦我尝试在特定索引处向它添加值,它就会崩溃并显示index out of range 消息。我认为这与我初始化数组的方式有关 - 我必须更具体地了解它可以存储的内容等。在这个线程:Filling the Multidimensional Array in Swift 有人建议我应该像这样初始化数组(显然修改为我的目的):

var array: [[Int]] = Array(count:N, repeatedValue:Array(count:N, repeatedValue:0))

但我没有让它工作,也没有正确理解它。下面是我的代码。它在最后一行代码崩溃。

    var multiArray = [[Tile]]()

    var gb = gameBoard.frame.width/4

    for xItem in 0...3 { //DRAW TILE ON X AXIS

        for yItem in 0...3 { //DRAW TILE ON Y AXIS
            //CREATES A VARIABLE FOR TILE WITH PROPERTIES
            tileView = Tile(frame: CGRect(x: (CGFloat(xItem) * gb), y: (CGFloat(yItem) * gb), width: gb, height: gb))

            gameBoard.addSubview(tileView) //DRAWS TILE ONTO PARENT VIEW
            multiArray[xItem][yItem] = tileView   //CRASHES HERE WHEN TRYING TO ADD TO INDEX
        }
    }

【问题讨论】:

    标签: swift for-loop multidimensional-array append


    【解决方案1】:

    您实际上是在创建一个数组数组。您无法访问尚未创建的索引,因此只需一次创建一列并将项目附加到其中,然后将每个列数组附加到multiArray

    var multiArray = [[Tile]]()
    
    var gb = gameBoard.frame.width/4
    
    for xItem in 0...3 { //DRAW TILE ON X AXIS
        var col = [Tile]()
    
        for yItem in 0...3 { //DRAW TILE ON Y AXIS
            //CREATES A VARIABLE FOR TILE WITH PROPERTIES
            tileView = Tile(frame: CGRect(x: (CGFloat(xItem) * gb), y: (CGFloat(yItem) * gb), width: gb, height: gb))
    
            gameBoard.addSubview(tileView) //DRAWS TILE ONTO PARENT VIEW
            col.append(tileView)
        }
    
        multiArray.append(col)
    }
    

    如果您的数组填充了值类型(例如IntDouble)并且您具有合理的默认值(例如0),则您提到的用于初始化multiArray 的方法效果最好。如果您的数组将保存类实例,则效果不佳。您可以创建您的数组[[Tile?]] 并使用nil 值对其进行初始化,但是您必须稍后处理解包选项。 append 方法最适合您的情况。

    【讨论】:

    • 如果 Tile 是一个结构,它会工作。只需循环并更新每一帧。
    • 啊,我明白了,所以我必须实际创建一个单独的数组并将其附加到多数组,而不是指定索引。它完美无缺!感谢@vacawama 的帮助和花时间帮助我。非常感激! :)
    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2014-02-26
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多