Swift运行时如何处理元组?

时间:2015-01-06 15:55:49

标签: swift

我一直试图在不使用临时值的情况下交换2个对象,这样做是这样的:

var a = "Hello, "
var b = "world!"

(a,b) = (b,a)

a    // "world!"
b    // "Hello, "

有没有人知道这种语言是如何做的,是第二个元组(b,a)存储在内存中以允许第一个重新分配自身,还是通过切换引用来完成所有操作?

提前致谢

1 个答案:

答案 0 :(得分:0)

这种“转换”执行以下操作:

  • 替换类型

    的指针
    var classA = NSString(string: "foo")
    var classB = NSString(string: "bar")
    
    NSLog("%p %p", classA, classB) // 0x7fecd351def0 0x7fecd341cc30
    (classA, classB) = (classB, classA)
    NSLog("%p %p", classA, classB) // 0x7fecd341cc30 0x7fecd351def0
    
  • 值类型

    创建新的值(副本)
    var valueA = "baz"
    var valueB = "qux"
    
    NSLog("%p %p", valueA, valueB) // 0x7fecd34201b0 0x7fecd34211e0
    (valueA, valueB) = (valueB, valueA)
    NSLog("%p %p", valueA, valueB) // 0x7fecd351c880 0x7fecd351de90