我想使用WallType
创建SKSpriteNodes(请参阅下面的代码),并且只有当WallType
为.Corner
时,才会为其传递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
以满足我的需求?
在这个帖子中提出的建议似乎并不适用于我的情况: Can associated values and raw values coexist in Swift enumeration?
或者,如果我决定从WallType
枚举中删除原始值,我将如何从plist中加载它?
我希望这是有道理的!谢谢你的任何建议!
答案 0 :(得分:0)
你可以这样做,这样你就可以将Side enum留给Int的子类,但是你想把这个枚举传递给Wall,所以确保它将rawValue或index和side作为创建Wall的参数。 / p>
像这样,
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)")
}