正文
在實(shí)際項(xiàng)目中盛霎,我們經(jīng)常遇到一些需要取隨機(jī)數(shù)的情況。
比如:我們想要一個(gè)隨機(jī)顏色,這時(shí)候需要三個(gè)隨機(jī)的,范圍是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
返回給我們一個(gè)任意整數(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
需要一個(gè)UInt32類型的參數(shù)n,返回一個(gè)0 到 n - 1之間的一個(gè)類型為UInt32的整數(shù)界轩。這種寫法相對(duì)于第一種來說更安全画饥,具體原因,請(qǐng)參考這里
版本三:
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)
這里我做了點(diǎn)小封裝浊猾,因?yàn)槲覀冃枰∫粋€(gè)范圍內(nèi)的隨機(jī)數(shù)抖甘,而Swift中就有表示范圍的數(shù)據(jù)結(jié)構(gòu):CountableRange
和CountableClosedRange
。這兩個(gè)數(shù)據(jù)結(jié)構(gòu)的類型是struct
葫慎,CountableRange
表示半開區(qū)間(0..<256), CountableClosedRange
表示閉合區(qū)間(0...255)衔彻。這時(shí)候我們很容易想到擴(kuò)展它們,添加一個(gè)取隨機(jī)數(shù)的方法偷办,就能實(shí)現(xiàn)在這個(gè)取在某個(gè)特定范圍內(nèi)的隨機(jī)數(shù)了艰额。這種方法相對(duì)于上面兩個(gè),更自然椒涯,更容易理解當(dāng)然也容易記住柄沮。
具體詳細(xì)的代碼,請(qǐng)參考SwiftDevHints
參考
聯(lián)系方式
備注
我們?cè)谲浖_發(fā)的過程中废岂,為了提高效率祖搓,其中很重要的一環(huán)就是把反復(fù)使用到的功能或模塊封裝起來。因此我在GitHub上開源了一個(gè)小工具集 - SwiftDevHints湖苞,來總結(jié)自己在實(shí)際項(xiàng)目開發(fā)過程中封裝的一些小功能拯欧。
剛剛介紹的只是其中一個(gè)小功能,想看看其它更多功能财骨,請(qǐng)直接點(diǎn)擊SwiftDevHints镐作。如果您覺得對(duì)您有所幫助,請(qǐng)給一個(gè)star吧隆箩。