I have this expression which returns a UInt32
:
let randomLetterNumber = arc4random()%26
I want to be able to use the number in this if statement:
if letters.count > randomLetterNumber{
var randomLetter = letters[randomLetterNumber]
}
This issue is that the console is giving me this
Playground execution failed: error: <REPL>:11:18: error: could not find an overload for '>' that accepts the supplied arguments
if letters.count > randomLetterNumber{
~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
The problem is that UInt32
cannot be compared to an Int
. I want to cast randomLetterNumber
to an Int
. I have tried:
let randomLetterUNumber : Int = arc4random()%26
let randomLetterUNumber = arc4random()%26 as Int
These both cause could not find an overload for '%' that accepts the supplied arguments.
How can I cast the value or use it in the if statement?
Int(arc4random_uniform(26))
does two things, one it eliminates the negative results from your current method and second should correctly creat an Int from the result.
Just create a new int with it
let newRandom: Int = Int(randomLetterNumber)
if letters.count > newRandom {
var randomLetter = letters[newRandom]
}
or if you never care about the UInt32 you can just create an Int immediately:
let randomLetterNumber = Int(arc4random() % 26)
More simple than this, impossible:
Int(myUInteger)
You can do
let u: UInt32 = 0x1234abcd
let s: Int32 = Int32(bitPattern: u)
来源:https://stackoverflow.com/questions/24144557/swift-convert-uint-to-int