我想创建一个带有WallType
(请参阅下面的代码)的SKSpriteNodes,并且只有当WallType
为.Corner
时,才会为其方向传递一个Side
值。 枚举具有原始值,因为我需要将它们加载为plist中的数字,并且能够随机创建它们。Swift Enum与原始类型+ case参数的变通方法?
enum Side: Int {
case Left = 0, Right
}
enum WallType: Int {
case Straight = 0
case Corner(orientation: Side)
}
我得到的错误:“枚举与原始类型不能有例参数”
有一种解决方法,我可以通过SKSpriteNode一个值,其方向只有当它的WallType
是.Corner
? 目前,我每次都用方向值初始化它,即使它没有必要,因为它的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?
我希望有道理!感谢您的任何建议!
因为你只有两个方面,你有没有考虑具有用于左角和右角另一个枚举值枚举值? – zneak
谢谢zneak,这当然是一种解决方法!我宁愿将WallType枚举与2个案例保持一致,因为我在其他地方也使用它,但如果没有合理的其他解决方案,我会这样做。 – nontomatic