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

Call a function which expects arguments with SKAction.runBlock()

我正在使用 Swift 和 SpriteKit

我想使用 SKAction.runBlock() 来 运行 一个需要参数的函数 :

class Tile : SKShapeNode
{
}

override func didMoveToView()
{
    let tile = Tile()
    tile.runAction(SKAction.runBlock(myFunc(tile)))
}

func myFunc(tile: Tile)
{
}

当我尝试创建一个不需要任何参数的函数时,一切正常,但是 returns 上面的代码是这样的:

Cannot convert value of type '()' to expected argument type 'dispatch_block_t' (aka '@convention(block) () -> ()')

我有什么不明白的?

您缺少 {} 只是:

 tile.runAction(SKAction.runBlock({
    myFunc(tile)}))

写这样的表达式:

SKAction.runBlock(myFunc(tile))

您正在传递调用 myFunc(tile) 的结果。

(我相信您不认为这段代码:SKAction.runBlock(sin(0)),会将某种闭包传递给 runBlock。)

并且 myFunc(tile) 的 returned 值是一个空值,因为 myFunc 被声明为 return 没有。 void 值也可以表示为 ()。错误消息说 () 无法转换为 @convention(block) () -> ().

类型的闭包

因此,您需要创建类型为 @convention(block) () -> () 的闭包。

    tile.runAction(SKAction.runBlock({()->() in myFunc(tile)}))

简而言之:

    tile.runAction(SKAction.runBlock({myFunc(tile)}))