【问题标题】:Swift: enum depended from another enumSwift:枚举依赖于另一个枚举
【发布时间】:2014-10-09 03:08:00
【问题描述】:

我正在制作一个简单的游戏以更好地了解新语言,我制作了描述游戏关卡的枚举。我想制作另一个枚举来描述每个级别的敌人。(级别有不同的敌人)。所以,我想存档这样的东西:

enum GameLevel : Int {

    case Forest = 0, Swamp, Castle
    ...
}

enum Enemies : Int {

   // if .Forest than
   case Stump = 0, Frog // Forest Enemies

   //esle if ...
   case Zombie = 0, Witch // Swamp Enemies
   case Knight = 0, Archer // Castle Enemies 


   //var ... some predefined properties that all enemies have but each enemy have it's own values  
}

Enemies enum 语法错误,但我正在寻找一种方法来制作这样的东西。存档此文件的最佳解决方案是什么?

【问题讨论】:

  • 提示:你可以在enum中定义函数
  • @pNre 我知道,但我不明白这对我有什么帮助。

标签: types enums swift


【解决方案1】:

你可以编写一个函数来返回给定关卡中的所有敌人,如下所示:

enum GameLevel : Int {
    case Forest, Swamp, Castle
}

enum Enemies : Int {

    case Stump
    case Frog
    case Zombie
    case Witch
    case Knight
    case Archer

    static func enemiesInLevel(level: GameLevel) -> [Enemies] {
        switch level {
        case .Forest:
            return [Stump, Frog]
        case .Castle:
            return [Knight, Archer]
        default:
            return []
        }
    }

}

// this is how you can call it
let forestEnemies = Enemies.enemiesInLevel(.Forest)
let castleEnemies = Enemies.enemiesInLevel(.Castle)

【讨论】:

    【解决方案2】:

    您可以向 GameLevel 添加一个实例方法来列出与 GameLevel 的特定元素相关的所有敌人。

    enum GameLevel : Int {
        case Forest = 0, Swamp, Castle
        func enemies() -> Array<Enemy> {
            switch self {
            case .Forest: return [.Stump, .Frog]
            case .Swamp: return [.Zombie, .Witch]
            case .Castle: return [.Knight, .Archer]
        }
    }
    
    enum Enemy : Int {
        case Stump = 0, Frog, Zombie, Witch, Knight, Archer
    }
    
    let forestLevel = GameLevel.Forest
    forestLevel.enemies()
    

    最后请注意,Apple 建议对枚举使用单数名称(例如“Enemy”而不是“Enemies”)

    每个枚举定义都定义了一个全新的类型。与 Swift 中的其他类型一样,它们的名称(例如 CompassPoint 和 Planet)应该以大写字母开头。给枚举类型起单数而不是复数的名字,这样它们就读起来不言而喻:

    var directionToHead = CompassPoint.West”
    

    摘自:Apple Inc.“Swift 编程语言”。电子书。 https://itunes.apple.com/it/book/swift-programming-language/id881256329?l=en&mt=11

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 2021-01-04
      相关资源
      最近更新 更多