我需要创建一个对象类型为Range的数组。但是创建一个如下所示的数组会产生错误“引用泛型类型'Range'需要< ...>中的参数”
var ranges:Array<Range> = []
基本上,我要完成的是创建一个范围列表,它将作为生成随机类型的步骤函数。我没有使用数组就完成了这个,但是当我添加更多类型时,我觉得需要将它们循环到数组上。我的问题是范围以某种方式无法存储在Swift中的数组中。这是我的旧代码。
let twisterUpperRange = UInt32(roundf(twisterRate * 1_000))
let bombUpperRange = UInt32(roundf(bombRate * 1_000)) + twisterUpperRange
let blindUpperRange = UInt32(roundf(blindRate * 1_000)) + bombUpperRange
let randomNumber = arc4random_uniform(1_000) + 1
var powerupType:PowerupType
switch randomNumber {
case 0...twisterUpperRange:
powerupType = PowerupType.TwisterType
case twisterUpperRange...bombUpperRange:
powerupType = PowerupType.BombType
case bombUpperRange...blindUpperRange:
powerupType = PowerupType.BlindType
default:
powerupType = PowerupType.NormalType
}
return powerupType
答案 0 :(得分:2)
错误意味着Swift Range
是通用的,是区间结束类型的泛型类型:
var ranges : Array<Range<UInt32>> = []
let blindRate = 0.3
let twisterRate = 0.5
let bombRate = 0.2
let twisterUpperRange = UInt32(twisterRate * 1_000)
let bombUpperRange = UInt32(bombRate * 1_000) + twisterUpperRange
let blindUpperRange = UInt32(blindRate * 1_000) + bombUpperRange
ranges.append(0...twisterUpperRange)
ranges.append(twisterUpperRange...bombUpperRange)
ranges.append(bombUpperRange...blindUpperRange)
print(ranges)