Swift是否有类似于“ref”关键字来强制参数按引用传递的功能?

58

在Swift中,默认情况下,结构体和值类型按值传递,就像在C#中一样。但是C#还具有非常实用的ref关键字,它强制参数通过引用传递,以便在函数内更改相同的实例并从调用者的范围内访问。是否有一种方法在Swift中实现相同的结果?

1个回答

103

使用 inout 修饰符来定义函数参数。

func swapTwoInts(a: inout Int, b: inout Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

swapTwoInts(&someInt, &anotherInt)

请查看文档中的Function Parameters and Return Values


不错。在Swift 3中,'var'已被弃用,但'inout'可用。 - Canucklesandwich
更新的语法 - 我正在使用 Xcode 8.0,当前的 Swift 3 只接受 inout 限定符在类型之前,例如:func swapTwoInts(a: inout Int, b: inout Int) - Ryan H.
4
@tracicot 这两个不一样。var 是为了在本地方法作用域中拥有可变对象 - inout 是为了从方法中改变自身作用域中的对象。要小心。 - Eric Aya
如果该方法是用Objective C编写的呢? - Saad

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