typedef를 사용하지 않고 블록 메서드 매개 변수 선언
목표-C에서 typeef를 사용하지 않고 메서드 블록 매개 변수를 지정할 수 있습니까?함수 포인터처럼 되어야 하지만 중간 typeef를 사용하지 않고는 승리 구문을 누를 수 없습니다.
typedef BOOL (^PredicateBlock_t)(int);
- (void) myMethodTakingPredicate:(PredicateBlock_t)predicate
위의 컴파일만 실패합니다.
- (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate
- (void) myMethodTakingPredicate:BOOL (^predicate)(int)
제가 어떤 조합을 시도했는지 기억이 안 나요
- ( void )myMethodTakingPredicate: ( BOOL ( ^ )( int ) )predicate
예를 들면 이런 식으로...
[self smartBlocks:@"Pen" youSmart:^(NSString *response) {
NSLog(@"Response:%@", response);
}];
- (void)smartBlocks:(NSString *)yo youSmart:(void (^) (NSString *response))handler {
if ([yo compare:@"Pen"] == NSOrderedSame) {
handler(@"Ink");
}
if ([yo compare:@"Pencil"] == NSOrderedSame) {
handler(@"led");
}
}
메서드 매개변수로:
- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
다른 예(이 문제는 여러 가지 이점이 있습니다):
@implementation CallbackAsyncClass {
void (^_loginCallback) (NSDictionary *response);
}
// …
- (void)loginWithCallback:(void (^) (NSDictionary *response))handler {
// Do something async / call URL
_loginCallback = Block_copy(handler);
// response will come to the following method (how is left to the reader) …
}
- (void)parseLoginResponse {
// Receive and parse response, then make callback
_loginCallback(response);
Block_release(_loginCallback);
_loginCallback = nil;
}
// this is how we make the call:
[instanceOfCallbackAsyncClass loginWithCallback:^(NSDictionary *response) {
// respond to result
}];
훨씬 더 명확합니다!
[self sumOfX:5 withY:6 willGiveYou:^(NSInteger sum) {
NSLog(@"Sum would be %d", sum);
}];
- (void) sumOfX:(NSInteger)x withY:(NSInteger)y willGiveYou:(void (^) (NSInteger sum)) handler {
handler((x + y));
}
언급URL : https://stackoverflow.com/questions/5486976/declare-a-block-method-parameter-without-using-a-typedef
'programing' 카테고리의 다른 글
부분적으로 복사된 파일로 scp를 재개하는 방법은 무엇입니까? (0) | 2023.05.04 |
---|---|
동일한 서버에 있는 Mongo DB의 여러 인스턴스 (0) | 2023.05.04 |
iOS 배포용 P12 인증서 생성 방법 (0) | 2023.05.04 |
Windows에서 하나의 명령으로 폴더의 모든 파일 확장명 변경 (0) | 2023.05.04 |
MongoDB의 ERD에 해당합니까? (0) | 2023.05.04 |