我想做一些相对简单的事情。我想要一个泛型类型的二维数组。根据我的理解,我应该使用围绕基本类型的两组方括号,我可以使用简化的循环表达式来初始化值。
我有以下代码,但我收到错误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
}
}
}
答案 0 :(得分:2)
[[[BigBrother alloc] init] addSomeOperationsAndWaitTillFinished];
private var array: Array<Element?>
中的属性是正常的(“一维”)
用于存储Array2D
元素的数组。它必须用:
rows * columns
或仅(因为类型已知):
array = [Element?](count: rows * columns, repeatedValue: nil)
答案 1 :(得分:0)
Swift不知道Element
有Element
类型的初始值。
以下是如何使用帮助程序类执行此操作:
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)