SKAction.runBlock出错

时间:2014-09-29 15:39:41

标签: swift sprite-kit

以下是我正在玩的SpriteKit测试应用程序中的一些简单代码:

let wait = SKAction.waitForDuration(1)
let perform = SKAction.runBlock({self.checkAnswer()})
let checkAnswerSeq = SKAction.sequence([wait, perform])

我得到一个“'SKAction'不能转换为'(Selector,onTarget:AnyObject!) - > SKAction!'”错误在第二行。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

问题来自于runBlock是单个表达式闭包这一事实,其中编译器暗示了一个return语句。所以,runBlock的必需类型是() -> (),而我怀疑你的self.checkAnswer()正在返回一个值(根据方法名称判断,可能是Bool)。换句话说,您要返回Bool,其中Void是预期的。如果你写了一个额外的表达式,错误应该消失:

let perform = SKAction.runBlock { self.checkAnswer(); return () }

或者,实际上,任何其他表达式:

let perform = SKAction.runBlock { self.checkAnswer(); 42 }

或者,如果您使用返回的值:

let perform = SKAction.runBlock { let x = self.checkAnswer() }

或简单地说:

let perform = SKAction.runBlock { _ = self.checkAnswer() }

Some people consider this to be a bug。但是,该错误与语言的其余部分完全一致。换句话说,返回类型冲突不应该没有错误,就像它不应该在任何其他情况下一样。