這是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'是一個參數*類型*,這個參數被稱爲'塊'..它需要一段時間才能沉入...不要急於:) 現在我可以有我的+1嗎? ;) – abbood
@hfz如果你仍然在尋找塊..檢查[這](http://stackoverflow.com/questions/17773067/how-to-add-an-extra-argument-to-a-block)出來了! – abbood