Строка кодирования типа метода 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);
печать @?
,
Чтобы процитировать вашу документацию ссылку:
@ Объект (статически или типизированный идентификатор)
? Неизвестный тип (среди прочего, этот код используется для указателей на функции)