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); }];
我先定义:
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); }];