Swift通用2d阵列

时间:2016-02-17 01:09:17

标签: ios arrays swift generics multidimensional-array

我想做一些相对简单的事情。我想要一个泛型类型的二维数组。根据我的理解,我应该使用围绕基本类型的两组方括号,我可以使用简化的循环表达式来初始化值。 我有以下代码,但我收到错误cannot be constructed because it has no accessible initializes。下面是我正在使用的代码。提前感谢您的帮助。

array = [[Element]](count: 3, repeatedValue: Element(count: 2, repeatedValue: nil))

编辑: 我想提供我正在使用的代码的完整源代码

struct Array2D<Element> {
    let columns: Int
    let rows: Int
    private var array: Array<Element?>

    init(columns: Int, rows: Int) {
        self.columns = columns
        self.rows = rows
        array = [[Element]](count: 3, repeatedValue: Element(count: 2, repeatedValue: nil))
    }

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

2 个答案:

答案 0 :(得分:2)

[[[BigBrother alloc] init] addSomeOperationsAndWaitTillFinished];
private var array: Array<Element?> 中的

属性是正常的(“一维”) 用于存储Array2D元素的数组。它必须用:

初始化
rows * columns

或仅(因为类型已知):

array = [Element?](count: rows * columns, repeatedValue: nil)

答案 1 :(得分:0)

Swift不知道ElementElement类型的初始值。

以下是如何使用帮助程序类执行此操作:

class TwoDArray<T> {
    static func create(initialValue: T, rows: Int, cols: Int) -> [[T]] {
        let tmp = [T](count: cols, repeatedValue: initialValue)
        return [[T]](count: rows, repeatedValue: tmp)
    }
}

let result = TwoDArray.create(42, rows: 3, cols: 2)

如果要使用nil启动数组,则必须提供可选类型:

let result = TwoDArray<Int?>.create(nil, rows: 3, cols: 2)