我试着像这样做:
let myArray: [[MyClass]] = [5,5]
Run Code Online (Sandbox Code Playgroud)
其中[5,5]是数组的大小.我不能这样做.
ric*_*ter 25
如果你想创建一个多维数组类型的数组(即Ints,Strings,structs),那么codester的答案中的语法效果很好:
斯威夫特4
var arr = [[Int]](repeating: [Int](repeating: 0, count: 5), count: 5)
Run Code Online (Sandbox Code Playgroud)
斯威夫特早些时候
var arr = [[Int]](count: 5, repeatedValue: [Int](count: 5, repeatedValue: 0))
arr[0][1] = 1
// arr is [[0, 1, 0, 0, 0], ...
Run Code Online (Sandbox Code Playgroud)
如果你创建一个多维的引用类型数组(即类),这将获得一个对同一对象的许多引用的数组:
class C {
var v: Int = 0
}
var cArr = [[C]](count: 5, repeatedValue: [C](count: 5, repeatedValue: C()))
// cArr is [[{v 0}, {v 0}, {v 0}, {v 0}, {v 0}], ...
cArr[0][1].v = 1
// cArr is [[{v 1}, {v 1}, {v 1}, {v 1}, {v 1}], ...
Run Code Online (Sandbox Code Playgroud)
如果要创建一个引用类型的数组(单维或多维),那么动态生成数组可能会更好:
var cArr = [[C]]()
for _ in 0..<5 {
var tmp = [C]()
for _ in 0..<5 {
tmp += C()
}
cArr += tmp
}
// cArr is [[{v 0}, {v 0}, {v 0}, {v 0}, {v 0}], ...
cArr[0][1].v = 1
// cArr is [[{v 0}, {v 1}, {v 0}, {v 0}, {v 0}], ...
Run Code Online (Sandbox Code Playgroud)
(请参阅slazyk的答案,使用等效的较短语法map().)
或者制作一组可选项并填写其值:
var optArr = [[C?]](count: 5, repeatedValue: [C?](count: 5, repeatedValue: nil))
// optArr is [[nil, nil, nil, nil, nil], ...
optArr[0][1] = C()
// optArr is [[nil, {v 0}, nil, nil, nil], ...
Run Code Online (Sandbox Code Playgroud)
创建填充了同一类的不同对象的5x5数组.也许不是最漂亮的解决方案,而是一个有效的解决方案,并避免使用for循环:
let myArray = [[MyClass]](map(0..<5) { _ in
[MyClass](map(0..<5) { _ in
MyClass()
})
})
Run Code Online (Sandbox Code Playgroud)
编辑:
因为问题实际上是用'size'创建'empty'数组,所以我必须补充一点,如果它不是可选类型,你就不能把它'空'.但如果这是你想要的,你也可以这样做,因为rickster建议在他的答案的底部,只需创建5x5阵列nil.