我创建了默认的Cocoa / Swift应用程序。我的AppDelegate类如下。我已将窗口中的视图挂钩到AppDelegate中的scope.combinedData.campaigns[$scope.campaignId].connections.length
IBOutlet。
我要做的是将数组中的元素分配给工具提示的userdata。代码执行并打印确实设置了#39;三次。我原以为它只会打印“确实设置了”。两次,但第三次是调用addToolTipRect时,我将数组的第一个元素作为工具提示rect的userdata传入。
这对我来说似乎很奇怪,我想知道是否有人知道如何避免这种行为。我正在寻找的行为是,只有当myArray被分配给完全不同的数组时才会调用didSet。也许didSet不是我想要使用的......如果没有,它应该是什么?
有一个简单的测试项目在以下位置展示了这种行为:
https://github.com/ericgorr/tooltip_arrays
view
答案 0 :(得分:1)
userData
中的.addToolTipRect
参数是 inout 参数,这意味着它以读写方式访问元素:即使值未被更改,在这种情况下,didSet按预期触发。
参考:
调用该函数时,将复制参数的值。 在函数体中,复制了副本。 函数返回时,副本的值将分配给原始参数。
在这种情况下,使用&
,即使数组中的值未更改,也会通过该方法写入数组。