比较SKNode的userData会出错

时间:2014-12-21 06:16:23

标签: ios swift sprite-kit

SKNode可以使用userData来存储任意数据。

我设置了属性" isEvil"在两个SKNodes上。然后我想检查两个节点是否都是邪恶的。

var hero = SKNode()
hero.userData = ["isEvil": false]

var enemy = SKNode()
enemy.userData = ["isEvil": true]

if hero.userData!["isEvil"] == enemy.userData!["isEvil"] {
  println("the here and the enemy are equally evil!")
}

if行会出错:Type 'AnyObject?' does not conform to protocol '_RawOptionSetType'

我应该如何比较这些值?

根据docs,SKNode.userData为NSMutableDictionary?。由于它是可选的,我确定使用!打开值。

2 个答案:

答案 0 :(得分:1)

userData是一个NSMutableDictionary。这对我有用:

if hero.userData!.objectForKey("isEvil") as Bool == enemy.userData!.objectForKey("isEvil") as Bool

编辑:正如@DonnyP所指出的,它可以写得更简单:

if hero.userData!["isEvil"] as Bool == enemy.userData!["isEvil"] as Bool

答案 1 :(得分:1)

尝试此操作...如果isEvil未定义,userDatanil,和/或isEvil不是Bool,则会处理}:

    if hero.userData?["isEvil"] as? Bool == enemy.userData?["isEvil"] as? Bool {
        println("the hero and the enemy are equally evil!")
    }