Czy można określić parametr bloku metody w Objective-C bez użycia typedef? Musi być, podobnie jak wskaźniki do funkcji, ale nie mogę trafić w składnię wygrywającą bez użycia pośredniej czcionki:
typedef BOOL (^PredicateBlock_t)(int);
- (void) myMethodTakingPredicate:(PredicateBlock_t)predicate
kompiluje się tylko powyższe, wszystkie te zawodzą:
- (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate
- (void) myMethodTakingPredicate:BOOL (^predicate)(int)
i nie pamiętam, jakich innych kombinacji próbowałem.
Odpowiedzi:
źródło
typedef
naprawdę powinno być preferowane w bardziej skomplikowanych przypadkach.- ( void )myMethodTakingPredicate: ( BOOL ( ^ )( NSString *name, NSString *age ) )predicate { //How Should I Access name & age here...? }
BOOL ( ^ )( int )
zBOOL ( ^ )( int count )
.Tak to jest, na przykład ...
źródło
response
wsmartBlocks
definicji metody? Nie mógłbyś po prostu powiedzieć(NSString*))handler {
?(NSString *)) handler
. To też jest ważne.http://fuckingblocksyntax.com
Jako parametr metody:
źródło
Inny przykład (ten problem korzysta z wielu):
źródło
Jeszcze wyraźniej!
źródło