Можно ли указать параметр блока метода в Objective-C без использования typedef? Должно быть, как указатели на функции, но я не могу использовать синтаксис победы без использования промежуточного определения типа:
typedef BOOL (^PredicateBlock_t)(int);
- (void) myMethodTakingPredicate:(PredicateBlock_t)predicate
только вышеупомянутые компиляции, все они терпят неудачу:
- (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate
- (void) myMethodTakingPredicate:BOOL (^predicate)(int)
и я не могу вспомнить, какие еще комбинации я пробовал.
objective-c
parameters
objective-c-blocks
Богатырь
источник
источник
Ответы:
источник
typedef
действительно должно быть предпочтительным для более сложных случаев.- ( void )myMethodTakingPredicate: ( BOOL ( ^ )( NSString *name, NSString *age ) )predicate { //How Should I Access name & age here...? }
BOOL ( ^ )( int )
наBOOL ( ^ )( int count )
.Вот как это происходит, например ...
источник
response
вsmartBlocks
определении метода? Не могли бы вы просто сказать(NSString*))handler {
?(NSString *)) handler
. Это также верно.http://fuckingblocksyntax.com
В качестве параметра метода:
источник
Другой пример (эта проблема выигрывает от нескольких):
источник
Еще понятнее!
источник