可选数组是否设计为“不可变”?

时间:2014-06-27 15:00:18

标签: ios swift

正如我在文档中发现的那样,var声明的数组默认是可变的

var A: Int[] = [1,2,3]
A += 4
A //[1,2,3,4]

但是我从来没有找到理由,为什么可选数组是不可变的(它们应该是什么以及为什么)。这两个例子说明了我的担忧:

var A: Int[]? = [1,2,3]
A! += 4 // Error: could not find operator += etc. - .append does not work as well
A

这会产生错误,但这个错误

var A: Int[]? = [1,2,3]
var B = A!
B += 4
A = B
A  // [1,2,3,4]

并按预期执行。有什么特别的原因,为什么它不能在一行中完成,就像前面的例子一样?据我所知,底层数组就像是由let构造的,但它对我来说没有意义。

1 个答案:

答案 0 :(得分:0)

您的var A是Int []类型?虽然你的var B 不是 - 它隐含的是Int []类型,因为你将它设置为等于A的展开值。

B因此可以附加到(它是一个var数组),而A不能(它是一个var,但不是一个数组 - 它是一个可选的包装数组),但是,因为A是Int []?您可以将修改后的B分配给它。要附加到可选数组,您必须将其“解包”为LHS,如

A! += 4 // Doesn't work