Swift開發(fā)小技巧系列 - 隨機數(shù)生成

原文鏈接

正文

在實際項目中,我們經(jīng)常遇到一些需要取隨機數(shù)的情況。

比如:我們想要一個隨機顏色,這時候需要三個隨機的,范圍是0-255之間的RGB值

版本一:

let red = arc4random() % 256
let green = arc4random() % 256
let blue = arc4random() % 256

let color = UIColor(red: CGFloat(red)/255.0, green: CGFloat(green)/255.0, blue: CGFloat(blue)/255.0, alpha: 1.0)

arc4random返回給我們一個任意整數(shù),它類型是UInt32

版本二:

let red = arc4random_uniform(256)
let green = arc4random_uniform(256)
let blue = arc4random_uniform(256)

let color = UIColor(red: CGFloat(red)/255.0, green: CGFloat(green)/255.0, blue: CGFloat(blue)/255.0, alpha: 1.0)

arc4random_uniform需要一個UInt32類型的參數(shù)n,返回一個0 到 n - 1之間的一個類型為UInt32的整數(shù)。這種寫法相對于第一種來說更安全,具體原因,請參考這里

版本三:

extension CountableRange {
    public var randomInt: Int {
        let start = lowerBound as! Int
        let end = (upperBound as! Int) - 1
        let count = UInt32(end - start)
        return Int(arc4random_uniform(count)) + start
    }
}

extension CountableClosedRange {
    public var randomInt: Int {
        let start = lowerBound as! Int
        let end = upperBound as! Int
        let count = UInt32(end - start)
        return Int(arc4random_uniform(count)) + start
    }
}
let red = (0...255).randomInt
let green = (0...255).randomInt
let blue = (0...255).randomInt

let color = UIColor(red: CGFloat(red)/255.0, green: CGFloat(green)/255.0, blue: CGFloat(blue)/255.0, alpha: 1.0)

這里我做了點小封裝,因為我們需要取一個范圍內(nèi)的隨機數(shù),而Swift中就有表示范圍的數(shù)據(jù)結(jié)構(gòu):CountableRangeCountableClosedRange。這兩個數(shù)據(jù)結(jié)構(gòu)的類型是structCountableRange表示半開區(qū)間(0..<256), CountableClosedRange表示閉合區(qū)間(0...255)。這時候我們很容易想到擴展它們,添加一個取隨機數(shù)的方法,就能實現(xiàn)在這個取在某個特定范圍內(nèi)的隨機數(shù)了。這種方法相對于上面兩個,更自然,更容易理解當(dāng)然也容易記住。

具體詳細(xì)的代碼,請參考SwiftDevHints

參考

聯(lián)系方式

備注

我們在軟件開發(fā)的過程中,為了提高效率,其中很重要的一環(huán)就是把反復(fù)使用到的功能或模塊封裝起來。因此我在GitHub上開源了一個小工具集 - SwiftDevHints,來總結(jié)自己在實際項目開發(fā)過程中封裝的一些小功能。

剛剛介紹的只是其中一個小功能,想看看其它更多功能,請直接點擊SwiftDevHints。如果您覺得對您有所幫助,請給一個star吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 整型隨機數(shù)如果我們想要一個整型的隨機數(shù),則可以考慮用arc4random系列函數(shù)。我們可以通過man arc4ra...
    kobehjk閱讀 3,372評論 0 2
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,457評論 6 13
  • 問題 1)柯里化,通過柯里化,改造target-action,因為selector只能使用字符串,在編譯時無法發(fā)現(xiàn)...
    lanjing閱讀 3,751評論 3 19
  • 一 、隨機數(shù)的介紹 隨機數(shù) 生成一個隨機數(shù)是每一個開發(fā)人員必備的技能,其中生成隨機的的方法也是很多的,例如:arc...
    NetWork小賤閱讀 19,376評論 0 20
  • 一個app大多數(shù)情況下都會有設(shè)置頭像的功能,這就涉及到了訪問相冊問題,下面著重介紹這兩個類。 AssetsLib...
    lvzhehappy閱讀 3,043評論 0 50

友情鏈接更多精彩內(nèi)容