嗨,我正在使用这个库,我找到了这个函数:
- (void) queueRequest:(NSString*)urlPath completion:(void(^)(NSData*))completionWithDownloadedData;
我尝试传递一个简单的NSData *data;
并且它抛出一个错误,这到底是什么意思(void(^)(NSData*))
?我是第一次看到它。
非常感谢。
嗨,我正在使用这个库,我找到了这个函数:
- (void) queueRequest:(NSString*)urlPath completion:(void(^)(NSData*))completionWithDownloadedData;
我尝试传递一个简单的NSData *data;
并且它抛出一个错误,这到底是什么意思(void(^)(NSData*))
?我是第一次看到它。
非常感谢。
(void(^)(NSData*))
声明一个代码块。你可以这样调用你的函数。
[obj queueRequest:urlPath completion:^(NSData* data){
/* some code */
}];
data
是你的块的一个参数,你可以使用它。当 queueRequest 完成时,该块将被异步调用。
该接口是异步的,这意味着数据仅在稍后的某个时间可用。这意味着该方法不能简单地返回NSData*
(不一直阻塞,这是不切实际的)。现在这个问题经常用块来解决,这里的完成参数是一个接受NSData*
参数并返回的块void
。这就是您调用此类方法的方式:
[foo queueRequest:path completion:^(NSData *receivedData) {
NSLog(@"Received data: %@", receivedData);
}];
当数据可用时,调用将立即返回,并且该块将在稍后的某个时间执行。
它是一个接受NSData
对象作为唯一参数并且不返回任何内容的块。
请参阅 Apple 的Blocks 编程主题。