问题:给定一个最小正整数和一个最大正整数,如何在它们之间生成随机数(包含上下界)?
如果你有一定的开发经验,肯定用过随机颜色对某些控件做调试。实际上,生成随机颜色的实质也就是在一定范围内生成随机数。常用的生成随机数的函数是arc4random_uniform(_ __upper_bound: UInt32) -> UInt32
,在使用它的时候有几点需要注意:
1、它生成的随机数范围是[0, +∞);
2、它所使用数值的类型是UInt32,并不是Int,因此需要做类型转换。
因为使用arc4random_uniform(_ : )
函数生成的随机数不包含上界,但是我们的题目要求包含上界,所以在上下界相减时需要加1,以确保程序通过:
func challenge(min: Int, max: Int) -> Int {
return Int(arc4random_uniform(UInt32(max - min + 1))) + min
}
challenge(min: 2, max: 30)
最后再给一个随机颜色的代码。我们可以考虑给UIColor写一个扩展,将随机颜色的代码写在它的扩展中,这样使用的时候回比较方便:
extension UIColor {
// RGB
convenience init(r: CGFloat, g: CGFloat, b: CGFloat, alpha: CGFloat = 1.0) {
self.init(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: alpha)
}
// 随机颜色
class func randomColor() -> UIColor {
return UIColor(r: CGFloat(arc4random_uniform(256)), g: CGFloat(arc4random_uniform(256)), b: CGFloat(arc4random_uniform(256)))
}
}
网友评论