Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 可选阵列是否设计为;不变的;?_Ios_Swift - Fatal编程技术网

Ios 可选阵列是否设计为;不变的;?

Ios 可选阵列是否设计为;不变的;?,ios,swift,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声明的数组在默认情况下是可变的

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构造的,但对我来说还没有意义。

您的var A是Int[]类型的?虽然您的var B不是-它隐式地是Int[]类型,因为您将它设置为等于A的未包装值

因此,B可以附加到(它是一个变量数组),而a不能附加到(它是一个变量,但不是一个数组-它是一个可选的包装数组),但是,a是Int[]?您可以将修改后的B分配给它。要附加到可选数组,必须像LHS一样“展开”它

A! += 4 // Doesn't work

这种可能的重复实际上对任何值类型都有效,而不仅仅是数组。这基本上就是我所想的,但它是这样的吗?或者它是我希望改进的东西吗?是的,我应该打开它-但是现在,似乎没有办法包装一个可变数组-所有包装为可选的数组都是不可变的,这就是我所关心的