Objective-C Blocks:不兼容的块指针类型



我正在尝试实现块调用。这是我的方法:

- (void) runTest; {
void (^MyBlock)(id, NSUInteger, BOOL) = ^(id obj, NSUInteger idx, BOOL stop) {
NSLog(@"Video game %@", (NSString *)obj);
};
BOOL stop;
MyBlock(@"Path of exile", 0, &stop);
NSArray *videoGames = @[@"fallout", @"Deus ex",@"final fintasy"];
[videoGames enumerateObjectsUsingBlock:MyBlock];
}

但是在这一行上:

[videoGames enumerateObjectsUsingBlock:MyBlock];

我收到此错误:

Incompatible block pointer types sending 'void (^__strong)(__strong id, NSUInteger, BOOL)' to parameter of type 'void (^ _Nonnull)(id _Nonnull __strong, NSUInteger, BOOL * _Nonnull)'

你们中的任何人都知道我做错了什么或我该如何解决这个问题?

我真的很感激你的帮助。

块的布尔参数应该是一个指针,因此你需要添加*

- (void) runTest; {
void (^MyBlock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"Video game %@", (NSString *)obj);
};
BOOL stop;
MyBlock(@"Path of exile", 0, &stop);
NSArray *videoGames = @[@"fallout", @"Deus ex",@"final fintasy"];
[videoGames enumerateObjectsUsingBlock:MyBlock];
}

MyBlock 的第 3 个参数应该是 BOOL 的指针

因此,添加 * 如下

void (^MyBlock)(id, NSUInteger, BOOL*) = ^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"Video game %@", (NSString *)obj);
};

https://developer.apple.com/documentation/foundation/nsarray/1415846-enumerateobjectsusingblock?language=objc

  • (void(enumerateObjectsUsingBlock:(void (^((ObjectType obj, NSUInteger idx, BOOL *stop((block;

最新更新