2014-09-12 2 views
2

У меня есть массив с несколькими значениями, которые я хотел бы выбрать из случайного числа, но у меня возникли проблемы с исполнением. Я новичок в Swift, поэтому я не уверен, что я делаю неправильно здесь.Как использовать arc4random_uniform для случайного выбора значения из массива

let types = ["value1", "value2", "value3"] 

class someClass { 
    let type = String(arc4random_uniform(UInt32(types))) 
} 

С помощью этого кода я получаю ошибку Playground execution failed: <EXPR>:39:16: error: cannot invoke 'init' with an argument of type 'UInt32' let type = String(arc4random_uniform(UInt32(types))) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Я пытался что-то немного другое, чтобы увидеть, если я мог бы обойти эту ошибку.

let types = ["value1", "value2", "value3"] 

class someClass { 
    let x = arc4random_uniform(UInt32(4)) 
    let type = types[x] 
} 

Но тогда я получаю эту ошибку: Playground execution failed: <EXPR>:39:22: error: 'BlogPost.Type' does not have a member named 'x' let type = types[x] ^

Я только работу с Swift за месяц до сих пор, так что я бы определенно признателен, если бы вы, ребята, могли бы поделиться своим представлением на оба методы, которые я пытался, и если оба метода могут быть исправлены, как бы вы переработали код для обоих примеров, чтобы заставить его работать?

ответ

5

Вот как вы можете это сделать:

let types = ["value1", "value2", "value3"] 
let type = types[Int(arc4random_uniform(UInt32(types.count)))] 
println(type) 
  • Актерский count к UInt32 необходимо потому, что arc4random_uniform принимает значение без знака
  • Актерский arc4random_uniform обратно Int требуется, так как индекс массива оператор [] принимает Int.

Demo (щелкните [Compile] внизу для запуска).

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