给定的是一个将Int映射到tuple的Swift字典。例如:

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

分配一个元组中的一个元素会改变字典的内部状态吗?
tuples[1].0 = 8 // Was the dictionary itself changed now?

此外,对字典中不同元组的并发访问是否是线程安全的?对同一个元组,但元组的不同元素的并发访问呢?
// 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字典中包含的元组的属性是否会更改Dictionary本身?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35005720/

10-16 18:03