ps: 'ReactiveObjC'를 사용하고 있습니다 ~> '2.1.0'
subscribeNext의 매개변수를 UIColor로 변경한 후 'void(^)(UIColor를 보내는 호환되지 않는 블록 포인터 유형' 오류가 발생합니다. __strong)'을 'void(^_Nonnull)(NSString _Nullable 유형의 매개변수로 변경) __strong)'"
하지만 임시 변수 validSearchTextSignal을 사용하여 신호를 저장한 다음 subscribeNext를 사용하면 아래와 같이 작동하고 컴파일이 통과되어 정상적으로 실행됩니다.
으아아아사실 수정 방법은 매우 간단합니다. 위의 방법 외에도 subscribeNext의 Block에서 NSString 변수에 대한 유형 변환을 수행할 수도 있습니다. 그런데 방법 1과 방법 2의 차이점이 궁금합니다. 방법 2는 구현할 수 있지만 방법 1은 컴파일할 수 없는 이유는 무엇입니까?
이 메소드의 선언을 확인해보니 포인티드 유형이 id 유형인데 메소드 1 시나리오에서 컴파일러가 NSString 유형을 프롬프트하는 이유는 무엇입니까? 방법 2 시나리오에서 프롬프트는 ID 유형입니다. 다음은 메소드 선언입니다. 표시 유형은 id 유형이며, NSString 유형의 메소드 선언은 없습니다
보충 정보:
stackoverflow RACSignal에 비슷한 질문이 있습니다. 호환되지 않는 블록 포인터 유형 처리, 한 가지 대답은 "오류의 원인은 subscribeNext 블록이 void를 반환하고 반환을 배치하면 다음과의 비호환성이 발생하기 때문입니다. 블록 서명이요.” 아직도 이유를 모르겠습니다.
현재는 비교적 안정적인 버전인 2.5를 사용하고 있는데, 2.1 버전을 설치하려고 했으나, 2.1.8 버전을 설치할 때마다 구체적인 소스코드를 볼 수 없어서 업그레이드 하시는 것이 좋을 것 같습니다. 그게 더 편해요