Swift:初始化2D数组(错误:上下文类型' Int'不能与数组文字一起使用)

时间:2016-11-13 21:08:59

标签: ios arrays swift int

我试图创建整数的2D数组:

var arr: [[Int]] = []
arr[0][0] = [123, 456, 789]

但我在第二行收到以下错误:

error: contextual type 'Int' cannot be used with array literal
arr[0][0] = [123, 456, 789]

你们中的任何人都知道如何将int值添加到2D数组中而没有错误?

我想在2D数组中添加以下值:

[123, 456, 789]
[2, 3, 5]
[100, 300, 400]

我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

arr[0][0]是一个Int,但您正在尝试为其[123, 456, 789]分配[Int](又名Array<Int>

您可以嵌套数组文字来实现您想要的效果:

let array = [ //inferred type: [[Int]]
    [123, 456, 789],
    [  2,   3,   5],
    [100, 300, 400],
]

答案 1 :(得分:2)

  

我想在2D数组中添加以下值:

[123, 456, 789] 
[2, 3, 5] 
[100, 300, 400]

你可以通过几种不同的方式实现这一目标。

只需在数组初始化时包含子数组

var arr = [[123, 456, 789], [2, 3, 5], [100, 300, 400]]

这允许你让arr成为不可变的(let arr = ...),以防所有子数组在编译时都已知,并且你知道你不需要改变arr在以后的时间。

如果在编译时未完全知道数组的内容:您可以使用append(...)在可用时逐个添加子数组

如果在arr实例化时子数组不可用,您可以使用数组+=运算符或append(_:)方法动态添加子数组提供数组到数组

var arr = [[Int]]()

// ... at some later (run-)time point    
let somSubArrProvidedAtRuntime = [100, 300, 400]
arr.append(somSubArrProvidedAtRuntime)
// ....

作为append(_:)的替代方案,使用append(contentsOf:)

一次添加多个子数组

鉴于上述情况相同,但同时提供了多个子数组,您可以使用append(contentsOf:)方法一次将多个子数组附加到数组

// some (one) sub-arr known at initialization
var arr = [[123, 456, 789]]

// some sub-arrays provided at runtime, a time later 
// than initialization
let subArrB = [2, 3, 5]
let subArrC = [100, 300, 400]

// ... using the `+=` operator for arrays
arr += [subArrB, subArrC]

// ... alternatively, using append(contentsOf:)
arr.append(contentsOf: [subArrB, subArrC])