SpriteKit Objective-C调用一个带有一个参数的代码块

时间:2018-02-19 00:36:48

标签: objective-c parameters objective-c-blocks

我首先定义:

 void (^cb)(NSUInteger) = ^void(NSUInteger number) {
        //SOME OTHER CODE ....

        [self.gamePlayLogic removeHeroMovementSegmentLine:number];
 };

然后我从中创建一个SKAction(类型为runBlock),传递一个参数,如下所示:

    NSUInteger movementActionsSoFar = [self.movementActions count];
    SKAction * codeCompletionAction = [SKAction runBlock:cb(movementActionsSoFar)];

但是,这不起作用,我收到错误消息:

Sending 'void' to parameter of incompatible type 'dispatch_block_t _Nonnull' (aka 'void (^)(void)')

我在这里做错了什么,伙计们?谢谢你的任何建议!

1 个答案:

答案 0 :(得分:2)

当您编写cb(movementActionsSoFar)时,您实际上是在告诉编译器执行 cb块并以movementActionsSoFar为参数,然后通过结果是-[SKAction runBlock:]cb块的结果是void,这不是-[SKAction runBlock:]所期望的 - 它想要一个块。

而不是这样,你可以将cb块包含在另一个块中,如下所示:

[SKAction runBlock:^{ cb(movementActionsSoFar); }];