在Swift中修改不可变数组的内容不起作用

时间:2015-01-16 17:51:03

标签: swift swift-playground

愚蠢的初学者Swift问题: 我期待在操场上使用以下3行代码:

let items = ["Apple", "Orange", "Pear"]
items[1] = "Banana" // error here
items

现在错误

error: '@lvalue $T5' is not identical to 'String'
items[1] = "Banana"

我理解在Swift中可以更新 immutable 数组的内容。 我使用XCODE 6.1.1

知道这里发生了什么吗?

由于

基于此线程,这在以前的版本中是可能的: Why in immutable array in swift value can be changed?

3 个答案:

答案 0 :(得分:1)

当您编写let时,您定义了一个不可变变量。请改用var;这允许您定义一个可变的变量。

答案 1 :(得分:1)

如前所述 - 如果您想更改阵列,请使用var数组。

稍微低于你发布链接的问题并在里面给出答案:

  

Swift中的数组已经完全重新设计,具有全部价值   字典和字符串之类的语义一直都在Swift中。这个   解决了各种可变性问题 - 现在是“让...”#39;数组是完全的   不可变的,一个&var;' var'数组是完全可变的 - 正确组合   使用Dictionary和String,并解决其他更深层次的问题。值   如果您习惯使用NSArray或C数组,语义可能会令人惊讶:a   数组的副本现在生成所有的完整和独立的副本   使用有效的懒惰副本实现的元素。这是一个   Array的主要变化,还有一些性能问题   得到解决。有关更多信息,请参阅Swift编程语言   信息。 (17192555)

答案 2 :(得分:0)

使用let关键字声明常量。 根据定义,不能修改常量。

您想使用var关键字来声明变量, 因此,将会/可能会有所不同。

来自apple Swift文档:

  

常量和变量

     

常量和变量关联名称(例如   maximumNumberOfLoginAttempts或welcomeMessage),值为a   特殊类型(例如数字10或字符串" Hello")。该   一旦设定,常数的值不能改变,而a   变量可以在将来设置为不同的值。

     

声明常量和变量

     

必须在使用常量和变量之前声明它们。您   使用let关键字声明常量,使用var声明变量   关键词。这是一个如何使用常量和变量的例子   跟踪用户进行的登录尝试次数:

     

让maximumNumberOfLoginAttempts = 10

     

var currentLoginAttempt = 0