鉴于以下枚举:
enum GameLevel {
case Level(Int)
case TutorialLevel, BossLevel
}
如何在Swift中生成GameLevel
类型的随机变量?
答案 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)