将swift数组的元素分配给userdata参数会触发didSet

时间:2015-11-17 21:38:14

标签: arrays swift cocoa pointers tooltip

我创建了默认的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

1 个答案:

答案 0 :(得分:1)

userData中的.addToolTipRect参数是 inout 参数,这意味着它以读写方式访问元素:即使值未被更改,在这种情况下,didSet按预期触发。

参考:

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/doc/uid/TP40014097-CH34-ID545

  

调用该函数时,将复制参数的值。   在函数体中,复制了副本。   函数返回时,副本的值将分配给原始参数。

在这种情况下,使用&,即使数组中的值未更改,也会通过该方法写入数组。