如果 Swift 通过值而不是引用传递,为啥我可以通过将 UIView 传递给函数来在 Swift 中操作 UIView 的属性? [复制]

Posted

技术标签:

【中文标题】如果 Swift 通过值而不是引用传递,为啥我可以通过将 UIView 传递给函数来在 Swift 中操作 UIView 的属性? [复制]【英文标题】:Why can I manipulate a UIView's properties in Swift by passing it into a function if Swift passes by value not reference? [duplicate]如果 Swift 通过值而不是引用传递,为什么我可以通过将 UIView 传递给函数来在 Swift 中操作 UIView 的属性? [复制] 【发布时间】:2015-11-17 04:30:16 【问题描述】:

也许这是一个愚蠢的问题,我完全误解了 Swift 中传递变量的工作原理,但我的印象是 Swift 默认是通过副本传递的,你可以使用 inout 关键字来表示传递参考。

那么,如果我有一个具有UIView 参数的函数,我可以在该函数中更改UIViewbackgroundColor,它会反映在函数之外。如果函数在传递时创建本地副本,这对传递的变量有何影响?

为什么不需要输入输出?

【问题讨论】:

简短:UIView 是一个引用类型(所有类也是)。 【参考方案1】:

因为您传递的UIView 是一个类实例:它是一个开始的指针。因此,从本质上讲,您 是按值传递该指针,因为您没有将 reference 传递给该指针(如 C中的 &pointer >)。

详细答案请参见Is Swift Pass By Value or Pass By Reference。

【讨论】:

以上是关于如果 Swift 通过值而不是引用传递,为啥我可以通过将 UIView 传递给函数来在 Swift 中操作 UIView 的属性? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

仅将 ArrayList 作为值而不是引用传递

当我递归调用它时,为啥我的函数返回以前的值而不是新的值?

JavaScript:闭包是不是可以通过值而不是像 PHP 中的引用来访问封闭范围内的变量?

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

如何根据步进值而不是 swift 3 中单元格的物理选择来选择表格视图的单元格?

如何按值而不是按引用将数组添加到列表中?