Unterstützt Dart Aufzählungen? Zum Beispiel:
enum myFruitEnum { Apple, Banana }
Eine flüchtige Suche in den Dokumenten schlägt nein vor.
Unterstützt Dart Aufzählungen? Zum Beispiel:
enum myFruitEnum { Apple, Banana }
Eine flüchtige Suche in den Dokumenten schlägt nein vor.
Antworten:
Ab 1.8 können Sie folgende Aufzählungen verwenden:
enum Fruit {
apple, banana
}
main() {
var a = Fruit.apple;
switch (a) {
case Fruit.apple:
print('it is an apple');
break;
}
// get all the values of the enums
for (List<Fruit> value in Fruit.values) {
print(value);
}
// get the second value
print(Fruit.values[1]);
}
Der alte Ansatz vor 1.8:
class Fruit {
static const APPLE = const Fruit._(0);
static const BANANA = const Fruit._(1);
static get values => [APPLE, BANANA];
final int value;
const Fruit._(this.value);
}
Diese statischen Konstanten innerhalb der Klasse sind Konstanten für die Kompilierungszeit, und diese Klasse kann jetzt beispielsweise in switch
Anweisungen verwendet werden:
var a = Fruit.APPLE;
switch (a) {
case Fruit.APPLE:
print('Yes!');
break;
}
const
ist nicht immer möglich (wenn die Aufzählung mit Attributen erstellt wurde, die nicht möglich sind const
). Deshalb habe ich es in meiner Antwort nicht verwendet (obwohl ich manchmal const
Enum in meinem Code verwende).
List<Fruit> value
?
for (Fruit value in Fruit.values)
Mit r41815 hat Dart native Enum-Unterstützung erhalten, siehe http://dartbug.com/21416 und kann wie verwendet werden
enum Status {
none,
running,
stopped,
paused
}
void main() {
print(Status.values);
Status.values.forEach((v) => print('value: $v, index: ${v.index}'));
print('running: ${Status.running}, ${Status.running.index}');
print('running index: ${Status.values[1]}');
}
[Status.none, Status.running, Status.stopped, Status.paused]
Wert: Status.none, Index: 0
Wert: Status.running, Index: 1
Wert: Status.stopped, Index: 2
Wert: Status.paused, index: 3
running: Status.running, 1
running index: Status.running
Eine Einschränkung besteht darin, dass möglicherweise keine benutzerdefinierten Werte für ein Aufzählungselement festgelegt werden können. Sie werden automatisch nummeriert.
Weitere Details finden Sie in diesem Entwurf unter https://www.dartlang.org/docs/spec/EnumsTC52draft.pdf
Dies und das können die Antworten auf Ihre Frage sein:
... for the technology preview it was decided to leave it out and just
use static final fields for now. It may be added later.
Sie können immer noch so etwas tun:
interface ConnectionState { }
class Connected implements ConnectionState { }
class Connecting implements ConnectionState { }
class Disconnected implements ConnectionState { }
//later
ConnectionState connectionState;
if (connectionState is Connecting) { ... }
was meiner Meinung nach klarer für den Gebrauch ist. Es ist etwas schwieriger, die Anwendungsstruktur zu programmieren, aber in einigen Fällen ist es besser und klarer.
Die Aufzählung sollte in Zukunft verfügbar sein. Aber bis Enum gelandet ist , können Sie Folgendes tun:
class Fruit {
static final APPLE = new Fruit._();
static final BANANA = new Fruit._();
static get values => [APPLE, BANANA];
Fruit._();
}
Wie wäre es mit diesem Ansatz:
class FruitEnums {
static const String Apple = "Apple";
static const String Banana = "Banana";
}
class EnumUsageExample {
void DoSomething(){
var fruit = FruitEnums.Apple;
String message;
switch(fruit){
case(FruitEnums.Apple):
message = "Now slicing $fruit.";
break;
default:
message = "Now slicing $fruit via default case.";
break;
}
}
}
Fruit.APPLE
. Wenn ich dann eine Textausgabe wünschte, hätte ich eine Karte, die sie übersetzt, oder eine Sprachunterstützung separat, wenn ich auch andere Sprachen unterstützen wollte. Ich denke auch, dass switch
Anweisungen am besten für ganze Zahlen funktionieren, da sie dann zu einer Sprungtabelle kompiliert werden können.
Ja! Es ist eigentlich sehr nützlich, Enums in Dart zu machen:
enum fruits{
BANANA, APPLE, ORANGE
}
Verwenden Sie einfach Types Class File.
einfach, schnell, leistungsfähiger und hilfreicher.
Kein Problem, es ist diese Klasse, die auf fünf verschiedene Auswahlmöglichkeiten und plus eine für Nullen beschränkt ist.