【问题标题】:Storing Ranges in an Array in Swift在 Swift 中将范围存储在数组中
【发布时间】:2014-09-25 10:59:12
【问题描述】:

我需要创建一个数组,其对象为 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

【问题讨论】:

  • 您的范围是否都将是同一类型(即UInt32)?如果是这样,您可以这样做:var ranges: Array&lt;Range&lt;UInt32&gt;&gt;.

标签: ios swift


【解决方案1】:

该错误表示 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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    相关资源
    最近更新 更多