Интересно, можно ли объявить/передать block
в качестве аргумента другого block
.Блок как аркамент блока
Позвольте мне проиллюстрировать с помощью кода и простой (не реальный) использовать регистр:
- Предположим, что
ViewController
неправдоподобным список объектов акаitems
черезItemsAPI
ViewController
хотел бы, чтобы отобразить контакты наmapView
Когда
mapView
выталкивается (выбрано):MapView
для отображения пункта должен запросить подробности пункта- Когда деталь пункта загружена
mapView
обновления это выноска или любого
Код Сейчас:
// MapView.h
typedef void(^FetchItemCompletion)(id item);
typedef void(^ShouldFetchSingleItem)(NSInteger itemID, FetchItemCompletion(id item));
@interface MapView : MKMapView
- (void)pinItems:(NSArray *)items shouldFetchSingleItem:(ShouldFetchSingleItem)shouldFetchSingleItem;
@end
Реализация
- (void)pinItems:(NSArray *)items shouldFetchSingleItem:(ShouldFetchSingleItem)shouldFetchSingleItem {
// For simplifying I'm using one method instead publishing mapViewDelegate and assigning blocks to self
// 1) Pin items
// 2) Some item seleceted - aka didSelectAnnotation
// 3) We need to define WHAT WILL HAPPNED when we get item details
FetchItemCompletion fetchItemCompletion = ^void(id item) {
// update callout or whatever
};
// 4) Request for item details with fake id - 1
shouldFetchSingleItem(1, fetchItemCompletion);
// 5) ViewController should fetch item thorough API and then execute block (simply some mapView code)
}
Так что ViewController бы быть в состоянии сделать следующие Getting ошибки
[mapView pinItems:items shouldFetchSingleItem:^(NSInteger itemID, FetchItemCompletion fetchItemCompletion) {
// request to API or whatever
id item = ...
fetchItemCompletion(item);
}
:
Возможно ли это каким-то образом и что политика памяти для этого? Есть ли узкие места или любые другие возможные проблемы.
Примечание: оценил ответ на исходный вопрос, а не об образце потребительной случае
omg ... вид орфографической ошибки, поэтому он работает так, как ожидалось, никогда не использовал блоки, подобные этому. Спасибо – Injectios