如何从包含Swift参数的枚举的枚举中生成随机变量?

时间:2014-08-04 16:53:25

标签: swift

鉴于以下枚举:

enum GameLevel {
    case Level(Int)
    case TutorialLevel, BossLevel
}

如何在Swift中生成GameLevel类型的随机变量?

3 个答案:

答案 0 :(得分:5)

我根据Apple标准更新了您的枚举(大写字母以启动类型,没有缩写。

enum GameLevel {
    case Level(Int)
    case TutorialLevel, BossLevel
}

首先,如何使用level的值创建常量或变量。

let level = GameLevel.Level(1)

接下来,对于使用arc4random_uniform级别的随机值:

let maxGameLevel: UInt32 = 10
let randomGameLevel: Int = Int(arc4random_uniform(maxGameLevel))
let level = GameLevel.Level(randomGameLevel)

当然,这可以放在一个功能中:

func RandomGameLevel() -> GameLevel {
    let maxGameLevel: UInt32 = 10
    return .Level(Int(arc4random_uniform(maxGameLevel)))
}

let level = RandomGameLevel()

最后,以下是如何在案例陈述中使用它:

switch level {
case .Level(let levelValue):
    println("Level \(levelValue)")

case .TutorialLevel:
    println("Tutorial Level")

case .BossLevel:
    println("Boss Level")
}

<强>更新

好的,包含其他值并不太难。我还将所有这些都放入GameLevel以便更好地打包它。

enum GameLevel {
    case Level(Int)
    case TutorialLevel, BossLevel

    static func Random() -> GameLevel {
        let maxGameLevel: UInt32 = 10 /* levels will be 0 through 9 */
        let otherGameLevels: UInt32 = 2 /* TutorialLevel and BossLevel */
        let levelValue = Int(arc4random_uniform(maxGameLevel + otherGameLevels))

        switch levelValue {
        case 10: return .TutorialLevel
        case 11: return .BossLevel
        default: return .Level(levelValue)
        }
    }
}

然后

let level = GameLevel.Random()

不是最干净的,但它是一个开始。

答案 1 :(得分:0)

enum GameLevel: CaseIterable {
    case Level(Int)
    case TutorialLevel, BossLevel
}

let level:GameLevel = GameLevel.allCases.randomElement()!

答案 2 :(得分:-2)

为什么你会这样需要它? :(

为开始和最终级别指定数字并实现一个函数,该函数将在该范围内随机返回为Lvl(int)