This question already has an answer here:
Swift: How to declare a 2d array (grid or matrix) in Swift to allow random insert
                                
                                    (1个答案)
                                
                        
                                4年前关闭。
            
                    
由于我是iOS原生编程的新手,因此在以下情况下我需要一些帮助。我需要的是一个类,其中包含一个数组或字典,该数组或字典具有2个整数的组合作为键(用于网格矩阵中的坐标),而Integer作为值。我在某个地方的教程中找到了一个解决方案,看起来像这样:

class Array2D<T> {
    let columns: Int
    let rows: Int

    var array: Array<T?>

    init(columns: Int, rows: Int) {
        self.columns = columns
        self.rows = rows

        array = Array<T?>(count: rows * columns, repeatedValue: nil)
    }

    subscript(column: Int, row: Int) ->T! {
        get {
            return array[(row * columns) + column]
        }
        set(newValue) {
            array[(row * columns) + column] = newValue
        }
    }
}


不幸的是,在初始化类后,这种类型的数组已经具有行*列的长度,这是我不想要的。数组开头应为空。但是,如果我初始化一个空数组,则在获取或设置尚不存在的键的值时会遇到问题。另外,我需要能够轻松地增加特定键的值(例如array[2, 3]++)。有人能很好地解决我的问题吗?

最佳答案

只需将其与可选参数一起使用,就不会设置任何初始值。在此示例中,您有columnsrows,它们是可选的,并用nil初始化。该数组被初始化为空数组。

class Array2D<T> {
    let columns: Int? = nil
    let rows: Int? = nil

    var array: Array<T?> = []
}

10-07 19:49
查看更多