以下是我正在玩的SpriteKit测试应用程序中的一些简单代码:
let wait = SKAction.waitForDuration(1)
let perform = SKAction.runBlock({self.checkAnswer()})
let checkAnswerSeq = SKAction.sequence([wait, perform])
我得到一个“'SKAction'不能转换为'(Selector,onTarget:AnyObject!) - > SKAction!'”错误在第二行。有什么想法吗?
答案 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。但是,该错误与语言的其余部分完全一致。换句话说,返回类型冲突不应该没有错误,就像它不应该在任何其他情况下一样。