我想使用WallType
创建SKSpriteNodes(请参阅下面的代码),并且仅当WallType
是时。Corner
为其方向传递一个Side
值。枚举具有原始值,因为我需要将它们作为plist中的数字加载并能够随机创建它们。
enum Side: Int {
case Left = 0, Right
}
enum WallType: Int {
case Straight = 0
case Corner(orientation: Side)
}
我收到错误:“原始类型的枚举不能有带有参数的情况”
有没有一种变通方法,只有当SKSpriteNode的WallType
是时,我才能将其方向值传递给SKSpriteNode。角
?目前,我每次都使用方向值对其进行初始化,即使没有必要,因为它的WallType
是。直的
。
我想我可以让Side
成为可选的,但是我也必须更改许多其他使用Side
的代码。然后,我仍然必须传入nil
。
我想像这样初始化墙:
let wall = Wall(ofType type: WallType)
有关它的方向的信息应该在WallType
中,但前提是它是。角落
。有没有办法扩展WallType
以满足我的需求?
这个线程中提出的建议似乎并不真正适用于我的情况:关联值和原始值可以在Swift枚举中共存吗?
或者,如果我决定从WallType
枚举中取出原始值,我将如何从plist中加载它?
我希望这有意义!感谢您的任何建议!
您可以将Side枚举保留为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)")
}