有没有办法确定传入的变量是引用类型还是值类型?

时间:2014-06-26 20:17:56

标签: swift

在Swift中,有没有办法通过代码确定传入的变量是引用类型还是值类型?

例如,是元组类型还是引用类型?

2 个答案:

答案 0 :(得分:5)

Everything 是一个值类型,除了:

  • 类的实例

  • 功能

  • 一个数组(以奇怪的方式工作;它通过引用传递,但如果它是可变的并且项目数已更改,则可以从其他化身中解除绑定)

测试的简单代码方法只是分配给两个不同的var名称,更改一个,并查看它们是否仍然相等。例如:

    var tuple1 = (1,2)
    var tuple2 = tuple1
    tuple1.1 = 3
    println(tuple1)
    println(tuple2)

它们不同,证明元组是通过传递的。但是:

    var arr1 = [1,2]
    var arr2 = arr1
    arr1[1] = 3
    println(arr1)
    println(arr2)

它们相同,证明数组是通过引用传递的。

修改

但是在Swift的 beta 3 中,这个异常的Array行为被撤销了,只有类实例和函数通过引用传递。其他所有东西现在都按价值传递。

答案 1 :(得分:1)

afaik,要通过引用传递,您需要在参数定义前面添加inout关键字。除非前缀为var关键字

,否则所有其他参数都是常量
  

“默认情况下,函数参数是常量。尝试从该函数体内更改函数参数的值会导致编译时错误。这意味着您无法错误地更改参数的值。“

和...

  

“如上所述,变量参数只能在函数本身内更改。如果您希望函数修改参数的值,并且希望在函数调用结束后这些更改仍然存在,请将该参数定义为输入输出参数。“

摘自:Apple Inc.“The Swift Programming Language。”iBooks。 https://itun.es/us/jEUH0.l