如果语句仍然执行,则返回false

时间:2014-07-06 20:55:53

标签: ios swift

我正在使用Xcode 6 Beta,我在另一个类中使用了这个确切的代码,以相同的方式设置。出于某种原因,它不想在这里工作。当我触摸SKNode时,我抓住它的名字,并将名称与两个字符串进行比较,如果它匹配其中任何一个,我执行一些代码。见下文。

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    for touch: AnyObject in touches {
        let node: SKNode = self.nodeAtPoint(touch.locationInNode(self))

        if node.name == "body" || "face" {
            self.childNodeWithName("face").runAction(SKAction.rotateByAngle(6.283, duration: 0.75))
        }
    }
}

正如我之前所说,这个确切的代码在我使用过的其他任何地方都能完美运行,但无论我按哪个节点,if语句中的代码都会运行。是的,我打印出了我正在触摸的节点的名称,但它们并不匹配。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

你可能意味着

if node.name == "body" || node.name == "face" {

用括号更清楚,你在做:

if (node.name == "body") || ("face") {

并且"face"true,这可能是Apple的一个错误,因为String不符合LogicValue所以你不应该像那样测试它。可能文字被解释为符合LogicValue的其他内容,例如CString

答案 1 :(得分:2)

您的if惯用词表示为switch

switch node.name {
  case "body", "face":
    self.childNodeWithName ...
  default: break
}

答案 2 :(得分:1)

我认为应该

if node.name == "body" || node.name == "face" { //change this statement

在你的功能中替换它

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    for touch: AnyObject in touches {
        let node: SKNode = self.nodeAtPoint(touch.locationInNode(self))

        if node.name == "body" || node.name == "face" {  //change this statement
            self.childNodeWithName("face").runAction(SKAction.rotateByAngle(6.283, duration: 0.75))
        }
    }
}