在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第一次发布时,只要不更改数组的长度,不变数组的元素仍然可以更改。在某种程度上,苹果屈服于理智的要求,改变了这一决定,使不可变数组成为真正不可变的数组。