使用原始类型+案例参数的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)") }
- 完整的屏幕截图为iPhone 6和6+
- 在纵向中使用UITabBarViewController,而在通用应用程序中横向使用UISplitViewController
- 防止NSAttributedString中的换行符
- 将JSON文件添加到应用程序
- 卸载应用程序不会删除应用程序组数据。我是否必须手动删除应用程序组容器和内容?
- 当用户从Cordova的iOS通知中心select通知时更改状态
- UITextView InputView UITableViewController
- 9款适用于iPhone和iPad的超赞付费iOS应用现已免费
- XMPPFramework – 删除已注册的用户帐户时出现“未经授权”错误