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です。randomLetterNumberにキャストしたいInt。私が試してみました:

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))1 つは現在のメソッドからの否定的な結果を排除し、2 番目は結果から Int を正しく作成する必要があります。

于 2014-06-10T15:16:02.777 に答える
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 に答える