不可变字典值的变化

时间:2014-06-26 11:22:43

标签: swift

我们可以在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

在不可变数组的情况下,我们可以像上面那样改变它的值但不是在不可变的情况下 字典。为什么呢?

3 个答案:

答案 0 :(得分:3)

这取自The Swift Programming Language一书:

  

对于词典,不变性也意味着你无法取代   字典中现有键的值。一本不可变的字典   内容一旦设置就无法更改。

     然而,

不变性对数组的意义略有不同。您   仍然不允许执行任何有可能的行动   更改不可变数组的大小,但您可以设置一个   数组中现有索引的新值。

答案 1 :(得分:2)

使用let声明的数组只有不可变长度。内容仍然可以更改 用let声明的字典是完全不可变的,你不能改变它的内容。如果需要,您必须使用var代替let

答案 2 :(得分:1)

从那以后,斯威夫特发生了很大的变化。

ArrayDictionary是值类型。当用let声明时,它们不能再改变了。特别是,人们不能重新分配它们或它们中的元素。

但是,如果元素的类型是引用类型,则可以更改ArrayDictionary中元素的属性。

以下是一个示例。(在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