Swift 中指针的替代品?
Alternatives to pointers in Swift?
我正在使用 SpriteKit 制作游戏。当特定类型的两个精灵发生碰撞时,我想记下其中一个精灵,然后在游戏后期更新该精灵。
使用指针,我基本上会执行以下操作。当两个对象发生碰撞时,我会设置一些全局指针指向我想要跟踪的精灵的地址。然后,当修改函数被调用时,它会修改指向该地址的任何内容,实质上是修改发生碰撞的精灵。
我宁愿不使用指针,因为 Swift 不鼓励直接访问内存。我无法通过引用修改函数来传递精灵,因为修改函数 (didSimulatePhysics) 未被我的代码调用。
谢谢!
您可以像这样使用 .unshare()
和 .copy()
:
var valueA = [1,2,3,4]
var valueB = valueA
现在,如果您更改值 A,值 B 也会更改:
valueA[1] = 4 // valueA and valueB are now equal to [1,4,3,4]
但是如果我们使用.unshare()
方法:
valueB.unshare()
然后 valueB 未共享,因此如果我们更改 valueA,valueB 将不会更改:
valueA[1] = 2 \ valueA == [1,2,3,4] && valueB == [1,4,3,4]
或者你可以使用.copy()
方法:
var valueC = valueA.copy()
等于:
var valueC = valueA
valueC.unshare()
我正在使用 SpriteKit 制作游戏。当特定类型的两个精灵发生碰撞时,我想记下其中一个精灵,然后在游戏后期更新该精灵。
使用指针,我基本上会执行以下操作。当两个对象发生碰撞时,我会设置一些全局指针指向我想要跟踪的精灵的地址。然后,当修改函数被调用时,它会修改指向该地址的任何内容,实质上是修改发生碰撞的精灵。
我宁愿不使用指针,因为 Swift 不鼓励直接访问内存。我无法通过引用修改函数来传递精灵,因为修改函数 (didSimulatePhysics) 未被我的代码调用。
谢谢!
您可以像这样使用 .unshare()
和 .copy()
:
var valueA = [1,2,3,4]
var valueB = valueA
现在,如果您更改值 A,值 B 也会更改:
valueA[1] = 4 // valueA and valueB are now equal to [1,4,3,4]
但是如果我们使用.unshare()
方法:
valueB.unshare()
然后 valueB 未共享,因此如果我们更改 valueA,valueB 将不会更改:
valueA[1] = 2 \ valueA == [1,2,3,4] && valueB == [1,4,3,4]
或者你可以使用.copy()
方法:
var valueC = valueA.copy()
等于:
var valueC = valueA
valueC.unshare()