Строка кодирования типа метода ObjC для метода с параметром Block

Я читаю статью Apple о строках кодирования типов во время выполнения Objective-C, но я не понимаю, как кодировать метод с параметром Block.

Например, у меня есть это:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler 

Я не понимаю, что использовать для (void(^)())completionHandler

2 ответа

Все типы объектов @, Поэтому я ожидал бы этого, потому что блоки - это объекты в Objective-C.

Тем не менее, вы можете задать саму среду выполнения с method_getTypeEncoding(),

Если есть сомнения, используйте @encode директива:

typedef void(^CompletionHandler)(void);

char *encoded = @encode(CompletionHandler);
NSLog(@"Encoded: %s", encoded);

печать @?,

Чтобы процитировать вашу документацию ссылку:

@ Объект (статически или типизированный идентификатор)
? Неизвестный тип (среди прочего, этот код используется для указателей на функции)

Другие вопросы по тегам