在Swift中修改不可变数组的内容无效

在Swift中修改不可变数组的内容无效,swift,swift-playground,Swift,Swift Playground,愚蠢的初学者敏捷问题: 我期望以下三行代码在操场上起作用: let items = ["Apple", "Orange", "Pear"] items[1] = "Banana" // error here items 现在是错误 error: '@lvalue $T5' is not identical to 'String' items[1] = "Banana" 我的理解是,在Swift中更新不可变数组的内容是可能的。 我使用XCODE 6.1.1 知道这是怎么回事吗 谢谢 基于此线程

愚蠢的初学者敏捷问题: 我期望以下三行代码在操场上起作用:

let items = ["Apple", "Orange", "Pear"]
items[1] = "Banana" // error here
items
现在是错误

error: '@lvalue $T5' is not identical to 'String'
items[1] = "Banana"
我的理解是,在Swift中更新不可变数组的内容是可能的。 我使用XCODE 6.1.1

知道这是怎么回事吗

谢谢

基于此线程,这在以前的版本中是可能的:

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

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

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

从apple文档中:

常数和变量

常量和变量关联一个名称(例如 MaximumNumberOfLoginAttests或welcomeMessage)的值为 特定类型(例如数字10或字符串“Hello”)。这个 常量的值一旦设置就不能更改,而 以后可以将变量设置为不同的值

声明常量和变量

常数和变量在使用前必须声明。你 用let关键字声明常量,用var声明变量 关键词。下面是一个如何使用常量和变量的示例 要跟踪用户尝试登录的次数,请执行以下操作:

设MaximumNumberOfLoginAttents=10

var currentloginattent=0


如前所述-如果您希望更改数组,请使用
var
数组

在问题下方,您发布了一个链接,并在其中给出了答案:

Swift中的数组已完全重新设计为具有完整值 像字典和字符串这样的语义在Swift中一直存在。这 解决各种易变性问题–现在完全可以使用“let”数组 不可变,并且“var”数组是完全可变的–正确组合 使用字典和字符串,并解决其他更深层次的问题。价值 如果您习惯使用NSArray或C数组,那么语义可能会令人惊讶:a 阵列的副本现在生成所有阵列的完整且独立的副本 元素使用有效的延迟复制实现。这是一个 阵列发生了重大变化,但仍有一些性能问题需要解决 请回答。有关更多信息,请参阅Swift编程语言 信息。(17192555)


Immutable通常意味着只读,我不知道为什么你能变异(写入)一个不可变数组——“如果你给一个常量分配一个数组或一个字典,那么这个数组或字典是不可变的,它的大小和内容不能改变。”当Swift第一次发布时,只要不更改数组的长度,不变数组的元素仍然可以更改。在某种程度上,苹果屈服于理智的要求,改变了这一决定,使不可变数组成为真正不可变的数组。