Was ist in Flutter / Dart der Unterschied zwischen der Verwendung von "==" und "is" in einer bedingten if-Anweisung [Duplikat]?

Dec 02 2020

Ich mache ein Tutorial über BLoC in Flutter und der Tutor verwendet das Schlüsselwort "is" in seiner bedingten if-Anweisung, die er als "smartcasts" des Zustands bezeichnete. Kann mir jemand helfen zu verstehen, wie der Operator "is" mir im folgenden Code Zugriff auf den Status des Blocks gewährt?

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

Wenn ich denselben Code mit if (state == WeatherLoaded) ausprobiert habe, kann ich state.weather nicht an die Funktion buildColumnWithData übergeben. Warum ist das?

Antworten

4 Lesiak Dec 02 2020 at 05:08

'==' ist ein Gleichheitsoperator .

Verwenden Sie den Operator ==, um zu testen, ob zwei Objekte x und y dasselbe darstellen. (In dem seltenen Fall, dass Sie wissen müssen, ob zwei Objekte genau dasselbe Objekt sind, verwenden Sie stattdessen die identische () Funktion.) So funktioniert der Operator ==:

Wenn x oder y null ist, geben Sie true zurück, wenn beide null sind, und false, wenn nur eins null ist.

Gibt das Ergebnis des Methodenaufrufs x. == (y) zurück. (Richtig, Operatoren wie == sind Methoden, die für ihren ersten Operanden aufgerufen werden. Weitere Informationen finden Sie unter Operatoren.)

'is' ist ein Typprüfoperator

Das Ergebnis von obj is Tist true, wenn obj die von T angegebene Schnittstelle implementiert. Beispielsweise ist obj is Object immer true.

In Ihrem Code:

isprüft, ob state eine Instanz der WeatherLoadedKlasse ist.

Darüber hinaus müssen Sie keine Umwandlung vornehmen, WeatherLoadedwenn die Prüfung erfolgreich war - im Rahmen der if-Anweisungsstatusvariablen wird auf WeatherLoaded"(ist Smartcasts der Status") herabgestuft.

Mit ==operator können Sie 2 Instanzen einer Klasse vergleichen.