我正在为一个应用程序构建模型,该模型可跟踪与婚纱更改有关的数据。我们的模型图显示了相关的枚举,其中“ Section”是最外面的枚举,然后每种情况都连接到另一个更详细的枚举。
当变更专家进行装修时,他们将输入他们计划进行的变更。我需要一种有效的方法来跟踪这些数量之间的关系。
我已经实现了一个基本示例,但是我无法存储这些“ Alteration”对象的数组并定义适当的类型。
这是我的游乐场代码:
struct Alteration {
var detail: Any
enum section {
case bodice
enum Bodice {
case addBraCups
case addOrRemoveBoning
}
case sides
enum Sides {
case bustTakeInOrOut
case hipOrWaistTakeInOrOut
}
}
}
var alterationOne = Alteration(detail: Alteration.section.Bodice.addBraCups)
var alterationTwo = Alteration(detail: Alteration.section.Sides.bustTakeInOrOut)
var alterations = [Any]()
alterations.append(alterationOne)
alterations.append(alterationTwo)
此代码可以编译,但是我不希望使用Any
。我还想知道以这种方式嵌套枚举是否有意义,以及这些嵌套枚举是否在结构或类内部有意义。
答案 0 :(得分:1)
尝试使用具有关联值的枚举。您的结构可能如下所示:
throw new Error(`Validation failed with the following errors:\n ${errorList}`);
^
Error: Validation failed with the following errors:
[SummitCodePipelineDemoStack/Pipeline] Artifact 'compile-output' was used as input before being used as output
at Synthesizer.synthesize (/home/stefan/Private/programmieren/aws/cdk/SummitCodePipelineDemo/node_modules/@aws-cdk/cdk/lib/synthesis.ts:51:15)
at App.run (/home/stefan/Private/programmieren/aws/cdk/SummitCodePipelineDemo/node_modules/@aws-cdk/cdk/lib/app.ts:75:27)
at Object.<anonymous> (/home/stefan/Private/programmieren/aws/cdk/SummitCodePipelineDemo/bin/summit_code_pipeline_demo.ts:8:5)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
Subprocess exited with error 1
(假设您列出的每个更改都是互斥的)
答案 1 :(得分:0)
枚举的一个问题是它们用于相互排斥的事物。但是你不是。
我想我会使用变更类型的数组,并使用类和子类来指定每个类型。例如:
struct Dress {
var bodiceAlterations = [BodiceAlteration]()
var sideAlterations = [SideAlteration]()
}
enum InOrOut {
case `in`
case out
}
enum AddOrRemove {
case add
case remove
}
class BodiceAlteration {}
class BraCupAlteration : BodiceAlteration {
}
class BoningAlteration : BodiceAlteration {
var addOrRemove = AddOrRemove.add
}
class SideAlteration {}
class BustAlteration : SideAlteration {
var inOrOut = InOrOut.out
}
class HipAlteration : SideAlteration {
var inOrOut = InOrOut.out
}
一个数组可以列出其类型的多个更改,并且如果没有该类型的更改,则数组可以愉快地为空。然后,子类会告诉您更具体的类型。枚举仅用于相互排斥的选择:髋关节改变可以在里面或外面,但不能同时出现。
课程为您提供成长的空间,例如适当添加测量值和其他数据作为属性。如果您有很多具有英制尺寸,日期等的类,则可以根据需要使用协议将它们结合起来(尽管如果它们 all 都可以从超类继承)