Flutter / Dart에서 조건부 if 문에서 "=="와 "is"를 사용하는 것의 차이점은 무엇입니까 [duplicate]

Dec 02 2020

저는 Flutter에서 BLoC에 대한 튜토리얼을 진행 중이며 교사는 조건부 if 문에서 "is"라는 키워드를 사용하여 상태를 "스마트 캐스트"한다고 말했습니다. 아래 코드에서 "is"연산자가 나에게 블록의 상태에 대한 액세스를 제공하는 방법을 이해하도록 도와 줄 수 있습니까?

BlocBuilder<WeatherBloc, WeatherState>(
            builder: (context, state) {
              if (state is WeatherLoaded) {
                return buildColumnWithData(context,state.weather);
              }

if (state == WeatherLoaded)로 동일한 코드를 시도했을 때 state.weather를 buildColumnWithData 함수에 전달할 수 없습니다. 왜 이런거야?

답변

4 Lesiak Dec 02 2020 at 05:08

'=='는 등호 연산자 입니다.

두 객체 x와 y가 같은 것을 나타내는 지 테스트하려면 == 연산자를 사용하십시오. (드문 경우 두 객체가 정확히 동일한 객체인지 알아야하는 경우에는 대신 same () 함수를 사용하십시오.) == 연산자의 작동 방식은 다음과 같습니다.

x 또는 y가 null이면 둘 다 null이면 true를 반환하고 하나만 null이면 false를 반환합니다.

메서드 호출 x. == (y)의 결과를 반환합니다. (맞습니다. ==와 같은 연산자는 첫 번째 피연산자에서 호출되는 메서드입니다. 자세한 내용은 연산자를 참조하세요.)

'is'는 유형 테스트 연산자입니다.

obj is Tobj가 T로 지정된 인터페이스를 구현하면 의 결과 는 true입니다. 예를 들어, obj는 Object는 항상 true입니다.

코드에서 :

is상태가 WeatherLoaded클래스의 인스턴스인지 확인합니다 .

무엇 WeatherLoaded보다 확인이 성공한 경우 캐스트 할 필요가 없습니다 . if 문 상태 변수의 범위에서 WeatherLoaded"is smartcasts the state"가 있습니다.

==운영자, 당신은 클래스의 두 인스턴스를 비교할 수 있습니다.