Swift既支持值传递(Value Type)也支持引用传递(Reference Type),这取决于数据类型的定义方式。
对于值类型,如Int、Double、String、Array、Dictionary等,它们在传递时会被复制一份,即进行值传递。这意味着,如果我们将一个值类型的实例赋值给另一个变量或者作为参数传递给函数,那么它们之间是相互独立的,修改其中一个不会影响另一个。
例如:
```
var a = 10
var b = a // 进行值传递,b的值为10
a = 20 // 修改a的值
print(a) // 输出20
print(b) // 输出10,b的值没有改变
```
对于引用类型,如Class、Closure、Protocol等,它们在传递时是通过指针来访问的,即进行引用传递。这意味着,如果我们将一个引用类型的实例赋值给另一个变量或者作为参数传递给函数,那么它们之间是共享同一个对象的,修改其中一个会影响另一个。
例如:
```
class MyClass {
var value: Int = 0
}
var a = MyClass()
a.value = 10
var b = a // 进行引用传递,b和a指向同一个对象
a.value = 20 // 修改a所指向的对象的值
print(a.value) // 输出20
print(b.value) // 输出20,b所指向的对象的值也被修改了
```
总之,Swift既支持值传递也支持引用传递,我们需要根据具体情况选择合适的传递方式。