Swift convertir UInt en Int

, j'ai cette expression qui retourne un UInt32:

let randomLetterNumber = arc4random()%26

Je veux pouvoir utiliser le nombre dans cette instruction if:

if letters.count > randomLetterNumber{
    var randomLetter = letters[randomLetterNumber]
}

Ce problème est que la console me donne ceci

Playground execution failed: error: <REPL>:11:18: error: could not find an overload for '>' that accepts the supplied arguments
if letters.count > randomLetterNumber{
   ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~

Le problème est que UInt32 ne peut pas être comparé à un Int. Je veux lancer randomLetterNumber à un Int. J'ai essayé:

let randomLetterUNumber : Int = arc4random()%26
let randomLetterUNumber = arc4random()%26 as Int

Ces deux causes could not find an overload for '%' that accepts the supplied arguments.

Comment puis-je lancer la valeur ou l'utiliser dans l'instruction if?

40
demandé sur 67cherries 2014-06-10 19:10:33

4 réponses

Int(arc4random_uniform(26)) fait deux choses, l'une élimine les résultats négatifs de votre méthode actuelle et la seconde devrait créer correctement un Int à partir du résultat.

73
répondu David Berry 2014-06-10 15:16:02

Créez simplement un nouvel int avec

let newRandom: Int = Int(randomLetterNumber)
if letters.count > newRandom {
    var randomLetter = letters[newRandom]
}

Ou si vous ne vous souciez jamais de L'UInt32, vous pouvez simplement créer un Int immédiatement:

let randomLetterNumber = Int(arc4random() % 26)
10
répondu Firo 2015-06-04 12:52:34

Plus simple que cela, impossible:

Int(myUInteger)
9
répondu Josh 2018-02-24 19:50:24

Vous pouvez faire

let u: UInt32 = 0x1234abcd
let s: Int32 = Int32(bitPattern: u)
1
répondu applequist 2015-09-02 22:31:30