如何在Swift中不使用第三个变量交换任意类型的两个变量?

6

我知道如何像下面这样交换整数

var x = 5
var y = 7

x = x + y
y = x - y
x = x - y

print(x)
print(y)

但是我如何在不使用第三个变量的情况下交换任何其他类型的两个变量呢?
1个回答

21

使用元组!

var a = "a"
var b = "b"
(b, a) = (a, b)
任何类型或任意数量的变量都适用于这种方法。
另一种类似于使用 Int 的方法:
a += b
b = String(a.dropLast(b.count))
a = String(a.dropFirst(b.count))

太棒了,谢谢。@Sweeper,还有其他方法吗?比如高级运算符? - Arafin Russell
2
或者简单地使用 swap(&a, &b) - Martin R
@ArafinRussell,我添加了另一种方法,与您使用Int的方式非常相似。或者像Martin R建议的那样,使用swap - Sweeper
顺便提一下,元组赋值和交换函数都使用某些中间存储,它们不会“在Swift中不使用第三个变量交换两个任意类型的变量” - Martin R
1
@MartinR,嗯,从技术上讲,在赋值之前,算术运算的结果也会存储在某些中间存储器中。 - user28434'mstep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接