Was ist in Flutter / Dart der Unterschied zwischen der Verwendung von "==" und "is" in einer bedingten if-Anweisung [Duplikat]?
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
'==' 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 T
ist true, wenn obj die von T angegebene Schnittstelle implementiert. Beispielsweise ist obj is Object immer true.
In Ihrem Code:
is
prüft, ob state eine Instanz der WeatherLoaded
Klasse ist.
Darüber hinaus müssen Sie keine Umwandlung vornehmen, WeatherLoaded
wenn 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.