2014-09-25 81 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.