2017-12-21 2 views
0

ReactiveCocoa Objective-C 버전 ReactiveObjC을 학습하고 있습니다. 다음 코드를 들어 Objective-C 블록 매개 변수 문제점 :이 블록 선언이 프로토 타입이 아닙니다.

: RACSignal.h에서,

(id _Nullable (^)())

엑스 코드

- (RACSignal *)reduceEach:(id _Nullable (^)())reduceBlock RAC_WARN_UNUSED_RESULT; 

는 오류를보고합니다

This block declaration is not a prototype

여러 매개 변수는 reduceBlock()에 넣어 수 있습니다. 코드를 다음과 같이 : UIAlertView+RACSignalSupport.m에서, 그리고 다른, 일종의 일반적인

- (RACSignal *)rac_buttonClickedSignal { 
    RACSignal *signal = [[[[self.rac_delegateProxy 
     signalForSelector:@selector(alertView:clickedButtonAtIndex:)] 
     reduceEach:^(UIAlertView *alertView, NSNumber *buttonIndex){ 
      return buttonIndex; 
     }] 
    ...... 
    return signal; 
} 

. 나는 블록에 0 개 이상의 매개 변수를 넣을 수 있다고 생각하며 void (^block)()을 선언했습니다.

구문은 Xcode에서 지원되지 않습니다. 나는 그것을 해결하는 방법과 그 이유를 알고 싶다.

많은 분들께 미리 감사드립니다.

답변

3

빈 괄호 세트 ()을 사용하여 함수 또는 블록 프로토 타입을 정의하려고 할 때 "프로토 타입이 아님"경고가 표시 될 수 있습니다.

팸알 중간에 void을 넣으십시오. (id _Nullable (^)(void))이며 문제를 해결해야합니다. 대신 매개 변수의 임의의 수의 배열을 허용하도록 서명을 재정의하는 경우

+0

그것을 해결거야, 대답은 그런 식으로'(ID _Nullable (^) (ID _Nullable입니다, ...))'그것은 쉽지 않습니다. * (id _Nullable (^)()) *, 여러 번 구문을 보았습니다. – dengApro

+1

@ dengApro 시도해 보셨습니까? 최근 버전에서는 Xcode의 Clang에 대한 기본 경고 설정이 더 엄격 해졌습니다. paren에'void '를 넣는 것은 정말로 그것을 고쳐야합니다. –

+0

나는 시험해 보았다. ** reduceEach : (id _Nullable (^) (void)) reduceBlock ** 그리고 func ** reduceEach를 죽입니다 :^(UIAlertView * alertView, NSNumber * buttonIndex) {** – dengApro