gpt4 book ai didi

ios - 分配包含在 Swift 字典中的元组的属性是否会改变字典本身?

转载 作者:行者123 更新时间:2023-11-28 11:11:07 25 4
gpt4 key购买 nike

Given 是一个 Swift 字典,它将 Int 映射到元组。例如:

var tuples: [Int: (Int, Int)] = [1: (1, 1), 2: (2, 2), 3: (3, 3)]

分配一个元组的一个元素是否会改变字典的内部状态?

tuples[1].0 = 8 // Was the dictionary itself changed now? 

此外,对 Dictionary 中不同元组的并发访问是否是线程安全的?对同一个元组的并发访问,但元组的不同元素呢?

// Is this safe? 
dispatch_async(queue1) {
tuples[1].0 = 10
}
dispatch_async(queue2) {
tuples[1].1 = 10
}


// What about this?
dispatch_async(queue1) {
tuples[1].0 = 10
}
dispatch_async(queue2) {
tuples[2].1 = 10
}

其他 Swift 集合(例如 Array)的行为方式是否相同?如果我们使用映射到某种对象类型而不是元组的字典会发生什么?

最佳答案

是的,这确实改变了词典。另一个聚合中包含的值类型是该聚合的“一部分”,而不是单独的实体。所以这适用于字典中的元组、字典中的数组等......

鉴于此,不,这不是线程安全的。在实践中,只要字典被唯一引用,它可能就是安全的(非唯一引用的字典会在它发生变化时复制它们的后备存储),但这很难甚至不可能保证。

如果您将元组包装在一个对象中,这就足够了,只要一次只有一个线程作用于任何给定的对象。

关于ios - 分配包含在 Swift 字典中的元组的属性是否会改变字典本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35005720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com