Swift 语言拥有出色的枚举支持。人们不仅可以用案例定义标准枚举,而且案例还可以具有“与其关联”的可选值。
例如,摘自 Swift 文档:
enum Barcode {
case UPCA(Int, Int, Int, Int)
case QRCode(String)
case Other
}
这样就可以通过传入一个值来创建条形码枚举,如下所示:
var productBarcode = Barcode.UPCA(8, 85909, 51226, 3)
并且switch
on productBarcode
稍后检索关联值(元组int
s).
我一直在尝试实现这种enum
JavaScript 系统(特别是 ES5),但我遇到了困难。构建枚举系统(尤其是具有关联值的枚举系统)的最佳方法是什么?
您可以使用受歧视联盟 https://www.typescriptlang.org/docs/handbook/advanced-types.html#discriminated-unions为了这。此示例使用 Typescript,但概念与 Javascript 类似,只是没有类型安全。
interface UPCA {
kind: "UPCA";
numberSystem: number;
manufacturer: number;
item: number;
checkDigit: number;
}
interface QRCode {
kind: "QRCode";
data: string;
}
interface Other {
kind: "Other";
}
type Barcode = UPCA | QRCode | Other;
然后您可以切换一个值Barcode
并在检查判别式后访问关联值。
function printBarcode(barcode: Barcode) {
switch (barcode.kind) {
case "UPCA":
console.log(`UPCA: ${barcode.numberSystem}-${barcode.manufacturer}`);
break;
case "QRCode":
console.log(`QRCode: ${barcode.data}`);
break;
case "Other":
console.log("Other barcode");
break;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)