在Swift中,有没有办法通过代码确定传入的变量是引用类型还是值类型?
例如,是元组类型还是引用类型?
答案 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