在 Swift 中对多维对象数组进行寻址



极端新手 Swift 语法问题...

尝试寻址 UIImageView 对象的多维数组并收到错误

无法下标索引为 键入 UInt32。

以为我正在创建一个 UIImageView 对象的 NxN 数组,但我想不是吗?

谢谢大家!

func loadDefaultImages()
{
    var pictures : [[UIImageView]] = [];
    let MaxRows: UInt32 = 4
    let MaxCols: UInt32 = 4
    var row: UInt32
    var col: UInt32
    for (row = 0; row <= MaxRows; row++)
    {
        for (col = 0; col <= MaxCols; col++)
        {
            var newImage = UIImageView(image: UIImage(named: "first"))
            pictures[row][col] = UIImageView() /* Error on this statement */
        }
    }
}

最初,你的pictures数组将不包含任何元素,(即它将计算为[])。当您尝试设置 pictures[0][0] 时,您正在尝试引用尚不存在的行和列。

相反,你可以随时构建数组,如下所示:

func loadDefaultImages() {
    var pictures : [[UIImageView]] = [];
    let MaxRows: UInt32 = 4
    let MaxCols: UInt32 = 4
    for _ in 0..<MaxRows {
        var aRow : [UIImageView] = []
        for _ in 0..<MaxCols {
            let newImage = UIImageView(image: UIImage(named: "first"))
            aRow.append(newImage)
        }
        pictures.append(aRow)
    }
}

但是,执行此操作的更简洁方法是使用 count, repeatedValue 函数创建具有默认大小的数组,如下所示:

func loadDefaultImages() {
    let MaxRows: Int = 4
    let MaxCols: Int = 4
    var pictures = [[UIImageView?]](count: MaxRows, repeatedValue: [UIImageView?](count: MaxCols, repeatedValue: nil))
    for row in 0..<MaxRows {
        for col in 0..<MaxCols {
            let newImage = UIImageView(image: UIImage(named: "first"))
            pictures[row][col] = newImage
        }
    }
}

最新更新