user3083988
user3083988

Reputation: 63

How do I access a random index inside an array

I'm trying to access an array using random indexes by using arc4random to generate the random index. I'm sorry if my "technical usage of terms" are incorrect as I am fairly new to the development scene.

var backLeft = ["Clear","Drop","Smash"];    
var i = (arc4random()%(3))
var shot = backLeft[i]

This gives me an error on the third line,

Could not find an overload for 'subscript' that accepts the supplied arguments.

But, if I use,

var i = 2
var shot = backLeft[i]

Then it doesn't give me any issues. Coming from a php background, I can't seem to have any clue what's going wrong here.

Thank You! :) PS: I'm trying this on XCODE 6 inside the Swift Playground

Upvotes: 5

Views: 1099

Answers (2)

Imanou Petit
Imanou Petit

Reputation: 92479

With Swift 5, if you want to get a random element from an array, you can use Array's randomElement() method:

let array = ["Clear","Drop","Smash"]
let randomElement = array.randomElement()
print(String(describing: randomElement)) // Optional("Smash")

If you want to get a random index from an array, you can use Array's indices property and Range's randomElement() method:

let array = ["Clear","Drop","Smash"]
let randomIndex = array.indices.randomElement()
print(String(describing: randomIndex)) // Optional(1)

Upvotes: 1

Cezar
Cezar

Reputation: 56352

That's due to Swift's enforcement of type safety.

arc4random() returns a UInt32, and the subscript operator takes an Int.

You need to make sure i is of type Int before passing it into the subscript operator.

You can do so by initializing an Int from i:

var shot = backLeft[Int(i)]

Or, you can do the same to the random value before assigning it to i and then access i normally:

var i = Int(arc4random()%(3))
var shot = backLeft[i]

Upvotes: 10

Related Questions