如果 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
参数的函数,我可以在该函数中更改UIView
的backgroundColor
,它会反映在函数之外。如果函数在传递时创建本地副本,这对传递的变量有何影响?
为什么不需要输入输出?
【问题讨论】:
简短:UIView 是一个引用类型(所有类也是)。 【参考方案1】:因为您传递的UIView
是一个类实例:它是一个开始的指针。因此,从本质上讲,您 是按值传递该指针,因为您没有将 reference 传递给该指针(如 C中的 &pointer
>)。
详细答案请参见Is Swift Pass By Value or Pass By Reference。
【讨论】:
以上是关于如果 Swift 通过值而不是引用传递,为啥我可以通过将 UIView 传递给函数来在 Swift 中操作 UIView 的属性? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript:闭包是不是可以通过值而不是像 PHP 中的引用来访问封闭范围内的变量?
Swift 是不是有类似“ref”关键字的东西强制参数通过引用传递?