Dart รองรับการแจงนับหรือไม่ ตัวอย่างเช่น:
enum myFruitEnum { Apple, Banana }
การค้นหาเอกสารแบบคร่าวๆแสดงว่าไม่มี
Dart รองรับการแจงนับหรือไม่ ตัวอย่างเช่น:
enum myFruitEnum { Apple, Banana }
การค้นหาเอกสารแบบคร่าวๆแสดงว่าไม่มี
คำตอบ:
เริ่มต้น1.8คุณสามารถใช้ enums ดังนี้:
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]);
}
แนวทางเก่าก่อน 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);
}
ค่าคงที่ภายในคลาสเหล่านั้นเป็นค่าคงที่ของเวลาในการคอมไพล์และตอนนี้คลาสนี้สามารถใช้ในswitch
คำสั่ง:
var a = Fruit.APPLE;
switch (a) {
case Fruit.APPLE:
print('Yes!');
break;
}
const
ไม่สามารถใช้งานได้เสมอไป (หาก enum สร้างขึ้นด้วยแอตทริบิวต์ที่ไม่สามารถconst
) นั่นเป็นเหตุผลที่ฉันไม่ได้ใช้มันในคำตอบของฉัน (แม้ว่าบางครั้งฉันจะใช้const
enum ในรหัสของฉัน)
List<Fruit> value
?
for (Fruit value in Fruit.values)
มิฉะนั้น Dart จะแสดงข้อผิดพลาด
ด้วย r41815 Dart ได้รับการสนับสนุน Enum ดั้งเดิมโปรดดูที่http://dartbug.com/21416และสามารถใช้งานได้เช่น
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]
value: Status.none, index: 0
value: Status.running, index: 1
value: Status.stopped, index: 2
value: Status.paused, ดัชนี: 3
กำลังทำงาน: Status.running, 1
ดัชนีการทำงาน: Status.running
ข้อ จำกัด คือไม่สามารถกำหนดค่าที่กำหนดเองสำหรับไอเท็ม enum ได้ซึ่งจะถูกกำหนดหมายเลขโดยอัตโนมัติ
รายละเอียดเพิ่มเติมในร่างนี้https://www.dartlang.org/docs/spec/EnumsTC52draft.pdf
นี้และนี่อาจจะเป็นคำตอบในคำถามของคุณ:
... for the technology preview it was decided to leave it out and just
use static final fields for now. It may be added later.
คุณยังสามารถทำสิ่งนี้ได้:
interface ConnectionState { }
class Connected implements ConnectionState { }
class Connecting implements ConnectionState { }
class Disconnected implements ConnectionState { }
//later
ConnectionState connectionState;
if (connectionState is Connecting) { ... }
ซึ่งในความคิดของฉันชัดเจนมากขึ้นสำหรับการใช้งาน การเขียนโปรแกรมโครงสร้างแอปพลิเคชันยากขึ้นเล็กน้อย แต่ในบางกรณีการเขียนโปรแกรมจะดีกว่าและชัดเจน
การแจงนับควรพร้อมใช้งานในอนาคต แต่จนกว่าEnum จะถึงฝั่งคุณสามารถทำสิ่งต่อไปนี้:
class Fruit {
static final APPLE = new Fruit._();
static final BANANA = new Fruit._();
static get values => [APPLE, BANANA];
Fruit._();
}
แนวทางนี้เป็นอย่างไร:
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
. จากนั้นถ้าฉันต้องการผลลัพธ์ที่เป็นข้อความฉันจะมีแผนที่ที่แปลมันหรือรองรับภาษาบางภาษาแยกกันหากฉันต้องการรองรับภาษาอื่นด้วย ฉันยังคิดว่าswitch
งบทำงานได้ดีที่สุดกับจำนวนเต็มเพราะสามารถรวบรวมลงในตารางกระโดดได้
ใช่ มันมีประโยชน์มากในการทำ Enums in Dart:
enum fruits{
BANANA, APPLE, ORANGE
}
เพียงใช้ไฟล์ประเภทคลาส
ง่ายรวดเร็วมีประสิทธิภาพและเป็นประโยชน์มากขึ้น
ปัญหาเล็กน้อยมันคือคลาสนี้ จำกัด ไว้ที่ห้าตัวเลือกที่แตกต่างกันและบวกหนึ่งสำหรับการกระทำเป็นโมฆะ