使用SKAction.runBlock()调用一个需要参数的函数

时间:2016-07-28 10:27:47

标签: swift sprite-kit skaction

我正在使用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)() - >()')

我不理解什么?

2 个答案:

答案 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)}))