Enumerations 的枚举和避免使用 Any 类型
Enumeration of Enumerations and avoiding the use of Any type
我正在为跟踪与婚纱修改相关的数据的应用构建模型。我们的模型图显示了相关的枚举,"Section" 是最外层的枚举,然后每个案例都连接到一个额外的、更详细的枚举。
改建专家进行试衣时,他们将输入他们计划进行的改建。我需要一种有效的方法来跟踪这些数量之间的关系。
See object model image
我已经实现了一个基本示例,但我无法存储这些 "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
。我还想知道以这种方式嵌套枚举是否有意义,以及这些嵌套枚举在结构或 class.
内部是否有意义
尝试使用具有关联值的枚举。您的结构可能如下所示:
enum BodiceVariation {
case addBraCups
case addOrRemoveBoning
}
enum SidesVariation {
case bustTakeInOrOut
case hipOrWaistTakeInOrOut
}
enum Alteration {
case bodice(BodiceVariation)
case sides(SidesVariation)
}
let alterationOne = Alteration.bodice(.addBraCups)
let alterationTwo = Alteration.sides(.bustTakeInOrOut)
var alterations = [Alteration]()
alterations.append(alterationOne)
alterations.append(alterationTwo)
(假设您列出的每个更改都是互斥的)
枚举的一个问题是它们适用于相互排斥的事物。但你的不是。
我想我会使用变更类型的数组,并使用 类 和子类来指定每个类型是什么。例如:
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
}
一个数组可以列出其类型的多个变化,如果没有该类型的变化,数组可以很高兴地为空。然后子类告诉你更具体的类型。枚举只是为了相互排斥的选择:髋关节改变可以是 in 或 out,但不能两者兼而有之。
类 给你成长的空间,例如酌情添加测量值和其他数据作为属性。如果你有很多 类 有英寸测量值、日期等,你可以在需要时使用协议将它们联合起来(尽管如果它们 all 有你只能从超类继承)。
我正在为跟踪与婚纱修改相关的数据的应用构建模型。我们的模型图显示了相关的枚举,"Section" 是最外层的枚举,然后每个案例都连接到一个额外的、更详细的枚举。
改建专家进行试衣时,他们将输入他们计划进行的改建。我需要一种有效的方法来跟踪这些数量之间的关系。
See object model image
我已经实现了一个基本示例,但我无法存储这些 "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
。我还想知道以这种方式嵌套枚举是否有意义,以及这些嵌套枚举在结构或 class.
尝试使用具有关联值的枚举。您的结构可能如下所示:
enum BodiceVariation {
case addBraCups
case addOrRemoveBoning
}
enum SidesVariation {
case bustTakeInOrOut
case hipOrWaistTakeInOrOut
}
enum Alteration {
case bodice(BodiceVariation)
case sides(SidesVariation)
}
let alterationOne = Alteration.bodice(.addBraCups)
let alterationTwo = Alteration.sides(.bustTakeInOrOut)
var alterations = [Alteration]()
alterations.append(alterationOne)
alterations.append(alterationTwo)
(假设您列出的每个更改都是互斥的)
枚举的一个问题是它们适用于相互排斥的事物。但你的不是。
我想我会使用变更类型的数组,并使用 类 和子类来指定每个类型是什么。例如:
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
}
一个数组可以列出其类型的多个变化,如果没有该类型的变化,数组可以很高兴地为空。然后子类告诉你更具体的类型。枚举只是为了相互排斥的选择:髋关节改变可以是 in 或 out,但不能两者兼而有之。
类 给你成长的空间,例如酌情添加测量值和其他数据作为属性。如果你有很多 类 有英寸测量值、日期等,你可以在需要时使用协议将它们联合起来(尽管如果它们 all 有你只能从超类继承)。