Reputation: 63
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
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
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