我想創建一個帶有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