我想做这样的事......
enum SpriteFrames:Int {
case N
case NE
case E
case SE
case S
case SW
case W
case NW
}
enum DroidSpriteFramesIdle:Int {
var image:String {
switch self {
case N:
return "droid_n"
case NE:
return "droid_ne"
case E:
return "droid_e"
case SE:
return "droid_se"
case S:
return "droid_s"
case SW:
return "droid_sw"
case W:
return "droid_w"
case NW:
return "droid_nw"
}
}
}
enum DroidSpriteFramesMove:Int {
var image:String {
switch self {
case N:
return "droid_move_n"
case NE:
return "droid_move_ne"
case E:
return "droid_move_e"
case SE:
return "droid_move_se"
case S:
return "droid_move_s"
case SW:
return "droid_move_sw"
case W:
return "droid_move_w"
case NW:
return "droid_move_nw"
}
}
}
...其中DroidSpriteFramesIdle
和DroidSpriteFramesMove
子类SpriteFrames
,或者将其作为协议或类似的东西来遵守。基本上,我想要有很多枚举,它们都有相同的方向列表(N,NE,E等),但是它们有这些常用方向的唯一值列表。我不想使用类,因为这会导致在分配时创建实例。尽管如此,对于其他想法持开放态度,我对Swift来说还是一个新手。感谢。
答案 0 :(得分:2)
您可以为该枚举创建一个可以充当子类
的别名前Apple默认:
public enum UITextFieldViewMode : Int {
case Never
case WhileEditing
case UnlessEditing
case Always
}
ex alias:
public typealias AutoCompleteButtonViewMode = UITextFieldViewMode
你的职能:
func showButtonWithViewMode(buttonViewMode: AutoCompleteButtonViewMode) {
// Code here
}
用法:
showButtonWithViewMode(.WhileEditing)
答案 1 :(得分:2)
也许分配枚举原始值会更具可读性。
<select name="send_product" id="send-product">
<option value="wall-mounted" selected>Wall-mounted (Default)</option>
<option value="freestanding">Freestanding</option>
<option value="third_party">Third Party</option>
</select><br><br>
<input type="checkbox" id="parts-cb1" value="1">
<br>
<input type="checkbox" id="parts-cb2" value="1">
<br>
<input type="checkbox" id="parts-cb3" value="1">
答案 2 :(得分:1)
感谢@Ashraf,我无法使您的建议适应我的代码,但它确实让我走上了一条令人满意的结论的道路。我最后编写了一些接受枚举作为参数的函数。从我最初的方法来看,它有点偏离轨道,但它会勾选所有方框,例如:具有最小的代码重复,并且仍然是避免不必要的实例化的功能方法。最终代码在这里:
enum Direction: Int {
case N
case NE
case E
case SE
case S
case SW
case W
case NW
}
enum Action: Int {
case Idle
case Move
}
func spriteFramesDroid(direction:Direction, action:Action) -> String {
switch action {
case .Idle:
switch direction {
case .N:
return "droid_n"
case .NE:
return "droid_ne"
case .E:
return "droid_e"
case .SE:
return "droid_se"
case .S:
return "droid_s"
case .SW:
return "droid_sw"
case .W:
return "droid_w"
case .NW:
return "droid_nw"
}
case .Move:
switch direction {
case .N:
return "droid_move_n"
case .NE:
return "droid_move_ne"
case .E:
return "droid_move_e"
case .SE:
return "droid_move_se"
case .S:
return "droid_move_s"
case .SW:
return "droid_move_sw"
case .W:
return "droid_move_w"
case .NW:
return "droid_move_nw"
}
}
}
答案 3 :(得分:0)
我相信你可以特别利用这篇文章的枚举部分。它显示了与您的想法有点相关的东西。 http://www.objc.io/issue-16/power-of-swift.html
从上述网站引用
&#34;他们非常相似。如果更改案例的命名,则唯一不同的是关联值。如果您还为可选的Nil大小写添加了一个值,则最终得到Either类型:
enum Either<A,B> {
case Left(A)
case Right(B)
}
当你想要在两件事之间做出选择时,Either类型在函数式编程中被大量使用。例如,如果您有返回整数或错误的函数,则可以使用Either。如果您想在字典中存储布尔值或字符串,可以使用Either作为键类型。
理论旁白:有时枚举是所谓的和类型,因为它们代表不同类型的总和。在Either的情况下,它们代表A和B的总和。结构或元组称为产品类型,因为它们代表不同类型的产品。另请参见:代数数据类型。&#34;