使用原始类型+案例参数的Swift Enum的解决方法?

我想创建一个带有WallType (请参阅下面的代码),并且只有当WallType.Corner时, WallType为其方向传递Side值。 枚举具有原始值,因为我需要将它们作为数字从plist加载并能够随机创建它们。

 enum Side: Int { case Left = 0, Right } enum WallType: Int { case Straight = 0 case Corner(orientation: Side) } 

我得到错误: “带有原始类型的枚举不能有带参数的情况”

有没有一种解决方法,只有当它的WallType.Corner时,我才可以将SKSpriteNode的值传递给它的方向? 目前我每次都使用一个值进行初始化,即使没有必要,因为它的WallType.Straight

我想我可以让Side可选,但是我必须改变很多其他代码,我也在使用Side 。 然后,我仍然必须传递nil

我想像那样初始化墙:

 let wall = Wall(ofType type: WallType) 

有关它的方向的信息应该在WallType内部,但仅限于.Corner 。 有没有办法扩展WallType以满足我的需求?

在这个post中提出的建议似乎并不适用于我的情况: 相关的值和原始值是否可以在Swift枚举中共存?

或者,如果我决定从WallType枚举中取出原始值,我将如何从plist中加载它?

我希望这是有道理的! 谢谢你的任何建议!

你可以这样做,这样你就可以将Side enum保留为Int的子类,但你想将这个枚举传递给Wall,所以确保它将rawValue或index和side作为创建Wall的参数。

像这样的东西,

 enum Side: Int { case Left = 0, Right } enum Wall { case Straight(Int) case Corner(Int,Side) } let straight = Wall.Straight(0) let corner = Wall.Corner(1, .Left) switch straight { case .Straight(let index): print("Value is \(index)") case .Corner(let index, let side): print("Index is: \(index), Side is: \(side)") }