簡體   English   中英

Swift隨機數問題

[英]Swift random number problems

我正在使用Swift和Xcode 6 Beta 5,並試圖在我的特定約束之間生成一個隨機數。

目前我正在使用arc4random_uniform()函數,它適用於簡單生成,如:

arc4random_uniform(5)

但我試圖創建一個帶有復雜邊界的隨機數。 這是我的嘗試:

randomMovement = Int( arc4random_uniform( (0.25 * Int(cs)) - ( 0.175 * rd ) ) ) + Int( 0.175 * rd )

cs和rd都是整數 - 最初,cs = 100,rd = 40.這應該生成7到25之間的隨機數。但是,由於變量類型,我在Xcode中遇到了很多問題。

使用此代碼,它最初顯示一個錯誤 - 在第一個'*'上,它表示:

'Int' is not convertible to 'UInt8'

但是當我改變它時,它會出現更多的問題,而且似乎我繼續圍成一圈。

出了什么問題,我該如何解決這個問題?

遇到類型問題時,請逐步構建表達式。

import Darwin

let cs = 100
let rd = 40

let min = UInt32(0.175 * Float(rd))
let max = UInt32(0.25 * Float(cs))

// This isn't really necessary, the next line will crash if it's not true, but
// just calling out this implicit assumption
assert(max >= min)

let randomMovement = Int(arc4random_uniform(max - min) + min)

arc4random_uniform采用UInt32 ,所以你需要到達那里。 如果沒有類型轉換,你不能將FloatInt相乘,所以你需要添加它們。

當我說“逐步建立”時,我的意思是你,而不是編譯器。 編譯器可以處理:

let randomMovement = Int(arc4random_uniform(UInt32(0.25 * Float(cs)) - UInt32(0.175 * Float(rd))) + UInt32(0.25 * Float(cs)))

但它有點難以理解(可能會計算兩次cs / 4)。

你可以在swift中使用內置的random()函數:

let randomInt = random() % 5

Swift 4.2中你可以做類似的東西:

let number = Int.random(in: 0 ..< 10)

使用Swift 4.2 ,您現在可以直接從Int.random調用。 你可以在這里看到更多細節。

let min  = a
let max = b

var x =  min + random_uniform(max - min)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM