我们可以在Swift Langauage中改变let type Dictionary中的任何对值。
喜欢:
let arr2 : AnyObject[] = [1, "23", "hello"]
arr2[1] = 23
arr2 // output: [1,23,"hello"]
let arr1 :Dictionary<Int,AnyObject> = [1: "One" , 2 : 2]
arr1[2] = 4 // not posible error
arr1
在不可变数组的情况下,我们可以像上面那样改变它的值但不是在不可变的情况下 字典。为什么呢?
答案 0 :(得分:3)
这取自The Swift Programming Language一书:
对于词典,不变性也意味着你无法取代 字典中现有键的值。一本不可变的字典 内容一旦设置就无法更改。
然而,不变性对数组的意义略有不同。您 仍然不允许执行任何有可能的行动 更改不可变数组的大小,但您可以设置一个 数组中现有索引的新值。
答案 1 :(得分:2)
使用let
声明的数组只有不可变长度。内容仍然可以更改
用let
声明的字典是完全不可变的,你不能改变它的内容。如果需要,您必须使用var
代替let
。
答案 2 :(得分:1)
Array
和Dictionary
是值类型。当用let声明时,它们不能再改变了。特别是,人们不能重新分配它们或它们中的元素。
但是,如果元素的类型是引用类型,则可以更改Array
或Dictionary
中元素的属性。
以下是一个示例。(在Xcode6 beta-6中运行)
class Point {
var x = 0
var y = 0
}
let valueArr: [Int] = [1, 2, 3, 4]
let refArr: [Point] = [Point(), Point()]
valueArr[0] = -1 // error
refArr[0] = Point() // error
refArr[0].x = 1
let valueDict: [Int : Int] = [1: 1, 2: 2]
let refDict: [Int: Point] = [1: Point(), 2: Point()]
valueDict[1] = -1 //error
refDict[1] = Point() //error
refDict[1]!.x = -1