53

我有这个表达式,它返回一个UInt32

let randomLetterNumber = arc4random()%26

我希望能够在这个 if 语句中使用数字:

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

这个问题是控制台给了我这个

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

问题是UInt32无法与Int. 我想转换randomLetterNumberInt. 我努力了:

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

这两个原因could not find an overload for '%' that accepts the supplied arguments.

如何转换值或在 if 语句中使用它?

4

4 回答 4

85

Int(arc4random_uniform(26))做两件事,一是消除您当前方法的负面结果,二是应该从结果中正确创建一个 Int 。

于 2014-06-10T15:16:02.777 回答
18

比这更简单,不可能:

Int(myUInteger)
于 2015-05-18T13:29:07.063 回答
11

只需用它创建一个新的 int

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

或者如果你从不关心 UInt32 你可以立即创建一个 Int :

let randomLetterNumber = Int(arc4random() % 26)
于 2014-06-10T15:16:08.963 回答
4

你可以做

let u: UInt32 = 0x1234abcd
let s: Int32 = Int32(bitPattern: u)
于 2015-09-02T22:31:30.123 回答