Это фрагмент из примеров кода AFNetworking в:нужно объяснение этого использования блока в качестве параметра метода
+ (void)globalTimelinePostsWithBlock:(void (^)(NSArray *posts, NSError *error))block {
[[AFAppDotNetAPIClient sharedClient] getPath:@"stream/0/posts/stream/global" parameters:nil success:^(AFHTTPRequestOperation *operation, id JSON) {
NSArray *postsFromResponse = [JSON valueForKeyPath:@"data"];
NSMutableArray *mutablePosts = [NSMutableArray arrayWithCapacity:[postsFromResponse count]];
for (NSDictionary *attributes in postsFromResponse) {
Post *post = [[Post alloc] initWithAttributes:attributes];
[mutablePosts addObject:post];
}
if (block) {
block([NSArray arrayWithArray:mutablePosts], nil);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (block) {
block([NSArray array], error);
}
}];
}
То, что я не понимаю, являются:
(void (^)(NSArray *posts, NSError *error))block
часть. Предполагая, что это блок, означает ли это, что блок является параметром методаglobalTimelinePostsWithBlock
?Следуя первому вопросу, может ли кто-нибудь объяснить синтаксис для меня? Почему в конце есть ключевое слово
block
?
Спасибо за ответ! Поэтому я предполагаю, что следующий вопрос заключается в следующем примере: '(int) (^ name) (int)', где имя расположено после типа возврата, почему это происходит в AFNetworking выше , имя ('block') записывается после параметра? – hfz
это две разные вещи .. '(int) (^ name) (int)' - это имя переменной, указывающей на блок, тогда как '(void (^) (NSArray * posts, NSError * error)) block' является аргументом * type *, и этот аргумент называется «block» .. он занимает некоторое время, чтобы утонуть в .. не торопите его :) теперь я могу получить мой +1? ;) – abbood
@hfz, если вы все еще смотрите в блоки .. проверьте [this] (http://stackoverflow.com/questions/17773067/how-to-add-an-extra-argument-to-a-block) вне! – abbood