2014-09-25 78 views
1

我需要创建一个其对象类型为Range的数组。但是,创造像下面的阵列产生一个错误“引用泛型类型‘范围’要求论点< ...>”在Swift中将数组存储在数组中

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

是你的范围都将是相同类型(即' UInt32')?如果是这样,你可以这样做:'var ranges:Array >''。 – 2014-09-25 02:51:45

回答

2

的错误意味着斯威夫特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.