簡體   English   中英

使用原始類型+案例參數的Swift Enum的解決方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM