Swift convert UInt to Int

67cherries picture 67cherries · Jun 10, 2014 · Viewed 65.6k times · Source

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?

Answer

David Berry picture David Berry · Jun 10, 2014

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.