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

SpriteKit Objective-C calling a code block which takes one parameter

我先定义:

 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)')

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

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

除此之外,您可以将 cb 块封装在另一个块中,如下所示:

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