Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 不可变字典值更改_Swift - Fatal编程技术网

Swift 不可变字典值更改

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

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