Est-il possible de spécifier un paramètre de bloc de méthode dans Objective-C sans utiliser de typedef? Cela doit être, comme les pointeurs de fonction, mais je ne peux pas trouver la syntaxe gagnante sans utiliser un typedef intermédiaire:
typedef BOOL (^PredicateBlock_t)(int);
- (void) myMethodTakingPredicate:(PredicateBlock_t)predicate
seuls les compilations ci-dessus, tous échouent:
- (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate
- (void) myMethodTakingPredicate:BOOL (^predicate)(int)
et je ne me souviens plus des autres combinaisons que j'ai essayées.
Réponses:
la source
typedef
devrait vraiment être préféré pour les cas plus compliqués.- ( void )myMethodTakingPredicate: ( BOOL ( ^ )( NSString *name, NSString *age ) )predicate { //How Should I Access name & age here...? }
BOOL ( ^ )( int )
parBOOL ( ^ )( int count )
.C'est ainsi que ça se passe, par exemple ...
la source
response
dans lasmartBlocks
définition de la méthode? Ne pourriez-vous pas simplement dire(NSString*))handler {
?(NSString *)) handler
. C'est également valable.http://fuckingblocksyntax.com
En tant que paramètre de méthode:
la source
Autre exemple (ce problème bénéficie de multiples):
la source
Encore plus clair!
la source