Ist es möglich, einen Methodenblockparameter in Objective-C anzugeben, ohne ein typedef zu verwenden? Es muss wie Funktionszeiger sein, aber ich kann die Gewinnsyntax nicht treffen, ohne ein Zwischen-Typedef zu verwenden:
typedef BOOL (^PredicateBlock_t)(int);
- (void) myMethodTakingPredicate:(PredicateBlock_t)predicate
nur die oben genannten Kompilierungen, alle diese schlagen fehl:
- (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate
- (void) myMethodTakingPredicate:BOOL (^predicate)(int)
und ich kann mich nicht erinnern, welche anderen Kombinationen ich versucht habe.
Antworten:
quelle
typedef
für kompliziertere Fälle wirklich bevorzugt werden sollte.- ( void )myMethodTakingPredicate: ( BOOL ( ^ )( NSString *name, NSString *age ) )predicate { //How Should I Access name & age here...? }
BOOL ( ^ )( int )
durchBOOL ( ^ )( int count )
.So geht es zum Beispiel ...
quelle
response
in dersmartBlocks
Methodendefinition? Könntest du nicht einfach sagen(NSString*))handler {
?(NSString *)) handler
. Das gilt auch.http://fuckingblocksyntax.com
Als Methodenparameter:
quelle
Ein weiteres Beispiel (dieses Problem profitiert von mehreren):
quelle
Noch klarer!
quelle