在一定范围内生成随机数

问题:给定一个最小正整数和一个最大正整数,如何在它们之间生成随机数(包含上下界)?

  如果你有一定的开发经验,肯定用过随机颜色对某些控件做调试。实际上,生成随机颜色的实质也就是在一定范围内生成随机数。常用的生成随机数的函数是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)))
    }
}

你可能感兴趣的:(Swift开发)