2015-04-28 6 views
2

Я любительский программист на Python, пытаясь использовать новый язык программирования Swift от Apple. Недавно я решил переписать сценарий Python, который у меня есть в Swift, как первый шаг к его созданию в приложении 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 
    } 
} 

* Это Swift функция выше unfininshed но вы можете видеть, где я идя с ним.

Так что, пытаясь переписать эту функцию, я получаю один из двух эорр. Либо, как она стоит сейчас, я получаю:

Ссылка на общий тип «массив» требует аргументов в < ...>

Или, если я использую тип возвращаемого Int вместо:

'[Int] не конвертируется в «Int»

Я знаю, что случайная функция Я с использованием в Swift является имеет некоторые осложнения что Pythons randint не делает, но до сих пор мне не удалось найти конкретную проблему. Является ли мой метод случайного целого числа по ошибке или я неправильно возвращаю список? У кого-нибудь с опытом Swift есть идея? Ответы в 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

Вам не нужно декларировать тот же var дважды – heinst

+0

oops cut and paste typo, thanks, fixed. –

Смежные вопросы