Swift 枚举并避免使用任何类型
我正在为一个应用程序建立一个模型,该应用程序跟踪与婚纱改动相关的数据。我们的模型图显示了相关的枚举,其中“Section”是最外层的枚举,然后每个案例都连接到一个额外的、更详细的枚举 当改装专家进行装配时,他们将输入计划进行的改装。我需要一种有效的方法来跟踪这些量之间的关系 我已经实现了一个基本示例,但是在存储这些“变更”对象的数组和定义适当的类型时遇到了问题 这是我的游乐场代码:Swift 枚举并避免使用任何类型,swift,nested,enumeration,class-design,Swift,Nested,Enumeration,Class Design,我正在为一个应用程序建立一个模型,该应用程序跟踪与婚纱改动相关的数据。我们的模型图显示了相关的枚举,其中“Section”是最外层的枚举,然后每个案例都连接到一个额外的、更详细的枚举 当改装专家进行装配时,他们将输入计划进行的改装。我需要一种有效的方法来跟踪这些量之间的关系 我已经实现了一个基本示例,但是在存储这些“变更”对象的数组和定义适当的类型时遇到了问题 这是我的游乐场代码: struct Alteration { var detail: Any enum secti
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
。我还想知道以这种方式嵌套枚举是否有意义,以及这些嵌套枚举在结构或类内部是否有意义。尝试使用带有关联值的枚举。您的结构可以如下所示:
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,但不能两者兼而有之
这些类为您提供了增长空间,例如,根据需要添加测量值和其他数据作为属性。如果您有很多类都有英寸测量值、日期等,如果需要,您可以使用协议将它们联合起来(尽管如果它们都有,您可以从超类继承)。这很好,谢谢@Gereon。我的下一步是现在为每个xVariation枚举附加三个价格。我需要一种方法来获取/设置每次更改的minPrice、maxPrice和actualPrice值。我是在变更枚举内声明计算属性,还是在xVariation枚举内声明计算属性?类似于此处显示的“值”的计算属性:这在很大程度上取决于您计划如何获取和/或计算价格值。如果你把它放在一个单独的问题中,再加上更多你想要实现的示例代码,可能是最好的。谢谢你,马特。这使工作效率大大提高。