Swift 不可变字典值更改
我们可以在Swift Langauage中更改let类型字典中的任何对值 比如:Swift 不可变字典值更改,swift,Swift,我们可以在Swift Langauage中更改let类型字典中的任何对值 比如: 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 让arr2:AnyObject
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
让arr2:AnyObject[]=[1,“23”,“hello”]
arr2[1]=23
arr2//输出:[1,23,“hello”]
让arr1:Dictionary=[1:1],2:2]
arr1[2]=4//不可能有错误
arr1
在不可变数组的情况下,我们可以像上面那样更改它的值,但在不可变数组的情况下不能
词典为什么?这摘自Swift编程语言书: 对于字典来说,不变性还意味着不能替换 字典中现有键的值。一成不变的词典 内容一旦设置,就不能更改 然而,不变性对数组的含义略有不同。你 仍然不允许执行任何可能导致 更改不可变数组的大小,但允许设置 数组中现有索引的新值
这摘自Swift编程语言手册: 对于字典来说,不变性还意味着不能替换 字典中现有键的值。一成不变的词典 内容一旦设置,就不能更改 然而,不变性对数组的含义略有不同。你 仍然不允许执行任何可能导致 更改不可变数组的大小,但允许设置 数组中现有索引的新值
用
let
声明的数组只有不可变的长度。内容仍然可以更改。用
let
声明的字典是完全不可变的,您不能更改它的内容。如果需要,必须使用var
而不是let
使用let
声明的数组只有不可变的长度。内容仍然可以更改。用
let
声明的字典是完全不可变的,您不能更改它的内容。如果您愿意,您必须使用var
而不是let
自那时以来,Swift发生了很大变化
Array
和Dictionary
是值类型。当使用let声明时,它们不能再更改。特别是,不能重新分配它们或其中的元素
但是,如果元素的类型是引用类型,则可以在数组
或字典
中更改元素的属性
下面是一个示例。(在Xcode6 beta-6中运行)
从那时起,斯威夫特改变了很多
Array
和Dictionary
是值类型。当使用let声明时,它们不能再更改。特别是,不能重新分配它们或其中的元素
但是,如果元素的类型是引用类型,则可以在数组
或字典
中更改元素的属性
下面是一个示例。(在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