正如我在文档中发现的那样,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构造的,但它对我来说没有意义。
答案 0 :(得分:0)
您的var A是Int []类型?虽然你的var B 不是 - 它隐含的是Int []类型,因为你将它设置为等于A的展开值。
B因此可以附加到(它是一个var数组),而A不能(它是一个var,但不是一个数组 - 它是一个可选的包装数组),但是,因为A是Int []?您可以将修改后的B分配给它。要附加到可选数组,您必须将其“解包”为LHS,如
A! += 4 // Doesn't work