[英]Workaround for Swift Enum with raw type + case arguments?
我想創建一個帶有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
時為WallType
傳遞一個值? 目前我每次都使用一個值進行初始化,即使沒有必要,因為它的WallType
是.Straight
。
我想我可以讓Side
可選,但是我必須改變很多其他代碼,我也在使用Side
。 然后,我仍然必須傳遞nil
。
我想像這樣初始化牆:
let wall = Wall(ofType type: WallType)
有關它的方向的信息應該在WallType
內部,但僅限於.Corner
。 有沒有辦法擴展WallType
以滿足我的需求?
在這個帖子中提出的建議似乎並不適用於我的情況: 相關的值和原始值是否可以在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)")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.