在Swift中存储数组中的范围

时间:2014-09-25 02:44:38

标签: ios swift

我需要创建一个对象类型为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

1 个答案:

答案 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)

Demo.