Associating a type with a Swift enum case?
我正在使用Swift 2,我想将struct类型与enum中的每种情况相关联。
目前,我已通过向枚举type添加一个函数来解决此问题,该函数使用switch语句针对每种情况返回相关类型的实例,但我想知道这是否有必要。我知道您可以将字符串,整数等与Swift枚举关联,但是也可以关联类型吗?如果有帮助,该类型的所有结构都遵循相同的协议。
这是我现在正在做的,但是我想取消使用此功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public enum Thingy {
case FirstThingy
case SecondThingy
func type() -> ThingyType {
switch self {
case .FirstThingy:
return FirstType()
case .SecondThingy:
return SecondType()
}
}
} |
- "这是我现在正在做的,但是我想取消使用此功能"为什么?您正在做的事情完美地做出了选择。它将类型与大小写相关联!这就是枚举方法的用途。我建议您保留所拥有的并继续前进。
-
我当然可以,但是我知道使用字符串等,我可以简单地执行case FirstThingy ="FirstThingy"。我想知道我们是否有一种方法可以对一个对象进行处理。
-
因此,您是说要让类型成为原始值吗?保留此属性,或者使其更好,使其成为计算属性。然后,您实际上可以使用thingy.type代替thingy.rawValue。
-
有趣的主意。如果您想获得荣誉,请随时留下答案:)
-
您当然可以说case FirstThing ="FirstThingy",但这是一个字符串文字。文字是您可以通过这种方式对待的唯一事物。类型或FirstThingy实例不是文字。如果可以使您感觉更好,则可以在type()函数中处理字符串文字,但是我想说这是不希望的间接级别。
我想您是说您希望原始值的类型为ThingyType,但这是不可能的。
您可以做的是将type设为计算属性,以删除(),而只需使用thingy.type进行访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public enum Thingy {
case FirstThingy
case SecondThingy
var type: ThingyType {
switch self {
case .FirstThingy:
return FirstType()
case .SecondThingy:
return SecondType()
}
}
} |
- 这不是可读性的问题。 ThingyType不符合原始值的条件。而且我看不出这个答案比OP的原始代码有何实质性的进步。
-
@matt我删除了可读性部分,并补充说它不可能成为原始值。这比方法更好,因为type通常是属性。 Thingy具有类型,而不是Thingy具有确定其自身类型的方法。
-
OP的问题是"我希望取消此功能"。但是您没有(也不能)"放弃"任何东西。计算属性中花括号内的内容是一个函数(它是get函数,getter函数,但您通过省略单词get掩盖了它)。这与OP想要取消的功能相同!因此,这个"答案"不过是小菜一碟-尽管足以满足OP要求,但我知道...
-
OP显然很容易满足,可以从Swift中学到一些知识,并且可以从稍微不同的angular来思考一些东西。 OP认为他改善了一个工程师的想法,并认为其他人也可以从答案中受益。我很抱歉 :)