Swift spritekit设置用户数据

Swift spritekit设置用户数据,swift,sprite-kit,Swift,Sprite Kit,在我的swift spritekit游戏中,我想在一个精灵上设置一个自定义值,我尝试这样做 p.userData?.setValue(value: "Hello", forKey: "c") 但当我尝试此操作时,它会说“找不到接受所提供参数的'setValue'的重载” 因此,主要问题是: 如何在精灵上设置自定义值?方法中的第一个参数没有外部参数名称, 所以应该是 p.userData?.setValue("Hello", forKey: "c") 或者更好(因为userData是一个NSM

在我的swift spritekit游戏中,我想在一个精灵上设置一个自定义值,我尝试这样做

p.userData?.setValue(value: "Hello", forKey: "c")
但当我尝试此操作时,它会说“找不到接受所提供参数的'setValue'的重载”

因此,主要问题是:

如何在精灵上设置自定义值?

方法中的第一个参数没有外部参数名称, 所以应该是

p.userData?.setValue("Hello", forKey: "c")
或者更好(因为
userData
是一个
NSMutableDictionary
并且没有键值编码 这里需要魔法):

还要注意(正如刚才在评论中提到的)您必须创建字典 第一:

或者,为字典分配键和值:

p.userData = ["c" : "Hello"]

您是否创建了NSMutableArray并将其分配给userData?默认情况下,属性为nil。为什么必须先创建它?为什么它默认为nil,而不是一个易变的字典呢?因为是否/何时使用它取决于你自己。为每个SKNode创建NSMutableDictionary是不必要的资源浪费。另一个很好的例子是SKNode的
physicsBody
属性。如果物理不用于该节点,则默认情况下无需创建
physicsBody
p.userData = NSMutableDictionary()
p.userData?.setObject("Hello", forKey: "c")
p.userData = ["c" : "Hello"]