您的位置:首页 > 移动开发 > Swift

Swift 随机数

2016-02-03 11:29 246 查看

错误的获取随机数

let maximum = 10
let random = Int(arc4random()) % maximum
print(random)


如此处理,由于 Swift 的
Int
和 CPU 架构有关:在 32 位的 CPU 上 (iPhone 5 和前任们),实际上它是
Int32
,而在 64 位 CPU (iPhone 5s 及以后的机型) 上是
Int64
arc4random()
所返回的值不论在什么平台上都是一个
UInt32
,于是在 32 位的平台上就有一半几率在进行
Int
转换时越界,导致时不时的崩溃。

安全的随机数生成

利用
arc4random_uniform(_: UInt32) -> UInt32
函数,接收一个
UInt32
位的数字 n 作为输入,返回 0 到 n-1 之间的随机值,就可以避免危险转换了。

let maximum: UInt32 = 10
let random = Int(arc4random_uniform(maximum))
print(random)


此处创建一个随机数方法,接收一个范围然后返回随机值。

func randomInRange(range: Range<Int>) -> Int {
let count = UInt32(range.endIndex - range.startIndex)
return Int(arc4random_uniform(count)) + range.startIndex
}

for _ in 0...100 {
print(randomInRange(1...6))
}


int randomInRange(int max, int min) {
UInt32 count = max - min;
return (int)arc4random_uniform(count) + min;
}

for (int i = 0; i < 10; i++) {
NSLog(@"%d", randomInRange(20, 10));
}


参考资料:http://swifter.tips/random-number/ 作者:王巍 (@onevcat)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS