Определение блоков в Objective-C

Довольно странный синтаксис у блоков в Objective-C, всегда забываю как определить локально блок. Собрал небольшую шпаргалку по этому поводу.

Блок как свойство объекта:

@property (copy, nonatomic) NSInteger (^userTapped)(NSInteger index, BOOL isSelf);

Блок возвращает тип NSInteger, имя блока userTapped, два параметра передаются в блок: index и isSelf. Типы параметров NSInteger и BOOL, соответственно.

Можно обернуть в typedef:

typedef NSInteger (^userTappedBlock)(NSInteger index, BOOL isSelf);

Тогда свойство объекта можно задать таким образом:

@property (copy, nonatomic) userTappedBlock userTapped;

И напоследок сниппеты для Xcode:


<#return type#> (^<#block name#>)(<#parameters#>) = ^<#return type#>(<#parameters#>) {
    <#...#>
    return <#...#>;
}; // Блок как локальная переменная

typedef <#return type#> (^<#block name#>)(<#parameters#>); //

@property (copy, nonatomic) <#return type#> (^<#block name#>)(<#parameters#>); //


Опубликовано: Февраль 25, 2015 ~ obj-c, blocks