Swift 是不是有类似“ref”关键字的东西强制参数通过引用传递?

Posted

技术标签:

【中文标题】Swift 是不是有类似“ref”关键字的东西强制参数通过引用传递?【英文标题】:Does Swift have something like "ref" keyword that forces parameter to be passed by reference?Swift 是否有类似“ref”关键字的东西强制参数通过引用传递? 【发布时间】:2014-07-23 03:12:04 【问题描述】:

在 Swift 中,结构和值类型默认按值传递,就像在 C# 中一样。但是 C# 也有一个非常有用的 ref 关键字,它强制参数通过引用传递,以便可以在函数内部更改同一个实例,然后从调用者的范围访问。有没有办法在 Swift 中实现相同的结果?

【问题讨论】:

【参考方案1】:

对函数参数使用inout 限定符。

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


swapTwoInts(&someInt, &anotherInt)

请参阅文档中的 Function Parameters and Return Values。

【讨论】:

不错。 'var' 在 Swift 3 中已弃用,但 'inout' 有效。 更新语法 - 我使用的是 Xcode 8.0,而当前的 Swift 3 只接受类型前的 inout 限定符,例如:func swapTwoInts(a: inout Int, b: inout Int) @tracicot 不一样。 var 用于在本地方法范围内拥有一个可变对象 - inout 用于在其自身范围内从方法中改变对象。小心。 如果方法是用Objective C编写的呢?

以上是关于Swift 是不是有类似“ref”关键字的东西强制参数通过引用传递?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Swift 2 偏爱强制解包而不是可选项?

Swift Guard

如何定义一个Swift协议来强制其采用者自己符合相关类型?

是否有可能有一个强制静态方法而不是类方法的 Swift 协议,反之亦然?

您可以强制标量或数组 ref 成为 Perl 中的数组吗?

Swift 是不是支持新的数据类型和代数数据类型?