2015-04-28 73 views
2

我是一位業餘的Python程序員,試圖用我的手掌握Apple的新Swift編程語言。我最近決定重寫一個我在Swift中使用的Python腳本,作爲將它構建到iOS應用程序中的第一步。我遇到了一些我迄今無法解決的挑戰。在Python我有一個返回隨機整數列表的功能:在Swift中返回整數列表

# Roll the Attackers dice in Python 
def attacker_rolls(attack_dice): 
    attacker_roll_result = [] 
    if attack_dice >= 3: 
     attacker_roll_result += [randint(1,6), randint(1,6), randint(1,6)] 
    elif attack_dice == 2: 
     attacker_roll_result += [randint(1,6), randint(1,6)] 
    elif attack_dice == 1: 
     attacker_roll_result = [randint(1,6)] 
    attacker_roll_result.sort(reverse=True) 
    print "The attacker rolled: " + str(attacker_roll_result) 
    return attacker_roll_result 

我在斯威夫特什麼迄今:

// Roll the attackers dice in Swift 
func attackerRolls(attackDice: Int) -> Array { 
    if attackDice >= 3 { 
     var attackerRollResult = [Int(arc4random_uniform(6)+1), Int(arc4random_uniform(6)+1), Int(arc4random_uniform(6)+1)] 
     return attackerRollResult 
    } 
} 

*高於雨燕功能unfininshed但你可以看到我的所在地一起去吧。

所以當試圖重寫這個函數時,我得到了兩個erorrs中的一個。不是,因爲目前的情況是,我得到:

引用泛型類型「數組」要求論點< ...>

或者,如果我使用INT返回類型改爲:

「[INT]」是無法轉換爲「廉政」

我知道我在斯威夫特利用隨機函數是有一定的併發症蟒蛇randint不,但到目前爲止,我一直無法追查具體問題。 是我的一個隨機整數錯誤的方法,還是我錯誤地返回列表? 任何有一些斯威夫特經驗的人都有想法嗎?在Obj-C中的答案也可能有所幫助。謝謝!

+0

'Array '應該可以工作 – heinst

回答

2

這不是你使用arc4random的問題,沒關係。這是因爲Swift中的數組內容是鍵入的,所以你需要返回一個Array<Int>(或者更經常看到,[Int]對於同樣的東西是語法糖)。

如果解決這個問題,你會再得到一個不同的編譯錯誤,因爲所有的代碼路徑必須返回一個值,所以請嘗試以下操作:

// Roll the attackers dice in Swift 
func attackerRolls(attackDice: Int) -> Array<Int> { 
    var attackerRollResult: [Int] 
    if attackDice >= 3 { 
     attackerRollResult = [Int(arc4random_uniform(6)+1), Int(arc4random_uniform(6)+1), Int(arc4random_uniform(6)+1)] 
    } 
    else { 
     attackerRollResult = [Int(arc4random_uniform(6)+1)] 
    } 
    return attackerRollResult 
} 

您也可能要考慮使用switch而比這個用例的if大。

+0

你不需要聲明兩次相同的變量 – heinst

+0

oops剪切和粘貼錯字,謝謝,修正。 –