【问题标题】:Array with reference type具有引用类型的数组
【发布时间】:2017-09-12 08:15:12
【问题描述】:

数组是值类型,因此它复制数据。

var arrayOne  = [UIView(), UIView()]
var arrayTwo = arrayOne
arrayOne.first!.alpha = 0.5
arrayTwo.first!.alpha // How this becomes 0.5?

但是arrayTwo.first!.alpha 打印0.5 不是1 请任何人解释为什么?

【问题讨论】:

  • 数组是引用类型 - 不,不是
  • 谢谢你的纠正。

标签: ios swift


【解决方案1】:

在 Swift 中,Array 是一种值类型 - 因此 arrayOne 的结果将被复制到 arrayTwo。但是,UIView 是引用类型,所以引用被复制了。引用仍然指向原始 UIView,这就是您看到这种行为的原因。

【讨论】:

    【解决方案2】:

    数组是 Swift 中的值类型,但您的项目仍然是引用类型,这意味着:两个数组都保存 引用的值,并且这些值是相同的。在您的示例中,您将两个内存地址存储为堆栈上的两个不同值,但两个值相同,并且两个值都指向同一个对象。

    【讨论】:

      【解决方案3】:

      数组是应用程序中最常用的数据类型之一。

      基本上,您的数组集合的类型是引用,您将 UIView 的引用分配给另一个数组,如果您想更改引用,则引用将相同,因此您必须执行 deep copy。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        • 2019-07-02
        相关资源
        最近更新 更多