我正在使用Swift和SpriteKit
我想使用SKAction.runBlock()来运行一个期望参数的函数:
class Tile : SKShapeNode
{
}
override func didMoveToView()
{
let tile = Tile()
tile.runAction(SKAction.runBlock(myFunc(tile)))
}
func myFunc(tile: Tile)
{
}
当我尝试创建一个不期望任何参数的函数时,一切正常,但上面的代码返回:
无法转换类型'()'的值预期的参数类型 ' dispatch_block_t' (又名' @convention(block)() - >()')
我不理解什么?
答案 0 :(得分:3)
写这种表达方式:
SKAction.runBlock(myFunc(tile))
您正在传递调用myFunc(tile)
的结果。
(我相信你不认为这段代码:SKAction.runBlock(sin(0))
会将某种封闭传递给runBlock
。)
myFunc(tile)
返回的值是一个void值,因为myFunc
被声明为什么都不返回。 void值也可以表示为()
。错误消息显示()
无法转换为@convention(block) () -> ()
类型的闭包。
因此,您需要创建一个@convention(block) () -> ()
类型的闭包。
tile.runAction(SKAction.runBlock({()->() in myFunc(tile)}))
简而言之:
tile.runAction(SKAction.runBlock({myFunc(tile)}))
答案 1 :(得分:1)
你缺少{}只是:
tile.runAction(SKAction.runBlock({
myFunc(tile)}))