arrays - 如果 var 似乎在 Swift 中深度复制数组。如果让?

标签 arrays swift deep-copy

在 Swift 3.0 中,下面的代码为 thisArray[0] 提供了不同的地址,表明该数组被深度复制。事实确实如此,还是我在分析中遗漏了什么? if let 的行为是否相同?它可能与 if let 无关,因为它是不可变的...

var thisArray: [String]? = ["One", "Two"]
withUnsafePointer(to: &thisArray![0]) {
    print("thisArray[0] has address \($0)")
}
if var thisArray = thisArray {
    withUnsafePointer(to: &thisArray[0]) {
        print("thisArray[0] has address \($0)")
    }
}

最佳答案

相关:https://developer.apple.com/swift/blog/?id=10 .

In Swift, Array, String, and Dictionary are all value types.

因此,如果您通过 varlet 分配现有的值类型,则会发生复制。如果您通过 varlet 分配现有的引用类型(例如类),那么您将分配一个引用。

关于arrays - 如果 var 似乎在 Swift 中深度复制数组。如果让?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39517243/

相关文章:

javascript - 通过 'for in'在javascript中获取对象的键和值

c - 为什么我们在这个 C 程序中使用指针?

swift - 如何在 ViewController B 的按钮中调用来自服务 ViewController A 委托(delegate)的方法?

arrays - 排序数组的问题

swift - 无法在 View Controller 之间提取数据: Swift 3

java - 如何在Java中搜索对象数组中的实例变量数组?

c - 当 actual 和 extern 类型不同时会发生什么?

python - deepcopy() 非常慢

c++ - 深度复制到堆上的 c 数组 block

java - 迭代器是否给我一个深拷贝?