我真的是Swift的新手,我刚刚读到类是通过引用传递的,并且复制了数组/字符串等。
通过引用进行传递是否与在Objective-C或Java中通过“a”引用进行传递相同,还是通过引用进行正确传递?
最佳答案
Swift中的事物类型
规则是:
inout
并采用地址来传递对其中之一的引用(作为函数参数)。但是类型本身就是一个值类型。 引用类型对您意味着什么
引用类型对象在实践中很特殊,因为:
let
,显式或隐式),对象本身也是可变的。 这些可能是危险,因此请注意。另一方面,传递引用类型显然是有效的,因为仅复制和传递了一个指针,这是微不足道的。
值类型对您意味着什么
显然,传递值类型是“安全的”,而
let
表示其含义:您无法通过let
引用对结构实例或枚举实例进行突变。另一方面,通过单独复制值来实现安全性,不是吗?这是否会使传递值类型变得昂贵?好吧,是的,不是。它并不像您想象的那样糟糕。就像Nate Cook所说的那样,传递值类型不一定意味着要进行复制,因为
let
(显式或隐式)可以保证不变性,因此无需复制任何内容。即使传递到var
引用也并不意味着将要复制的内容,只是在必要时可以复制它们(因为存在突变)。该文档特别建议您不要扭曲您的内裤。关于swift - 是通过值快速传递还是通过引用快速传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27364117/