如何在苹果的Swift语言中生成一个随机数
本文将向你解释如何用Swift语言生成随机数。
当你需要在你的iOS应用程序中生成随机值时,有一些常见的情况,比如说
- 模拟骰子的滚动。
-
洗牌。
-
为一个用户创建一个唯一的ID。
-
来自集合类型的随机值。
在Swift 4.2中,有新的、简单而安全的方法来生成随机值。在这之前,有一个用C语言编写的随机函数。今天,你将学习随机()函数,它接收一个数值范围,作为输出,它每次都会返回一个随机挑选的数值。
如何使用Arc4random()函数
我们来看看arc4random()函数的一个例子
要在Swift中生成一个随机数,你可以使用arc4random()函数,它可以生成一个0到UInt32.max之间的随机数。比如说。
import Foundation
let randomNumber = arc4random()
print(randomNumber)
这里要注意:在任何情况下,输出都是随机的。
这将产生一个介于0和UInt32.max之间的随机数,UInt32.max是一个32位无符号整数,范围为0到4,294,967,295。
示例
如果你想在一个特定范围内生成一个随机数,你可以使用以下语法。
import Foundation
let lowerRange: UInt32 = 1
let upperRange: UInt32 = 99
let randomNumber = arc4random_uniform(upperRange - lowerRange) + lowerRange
print("random number: \(randomNumber)")
输出
random number: 40
这里要注意:在任何情况下,输出都是随机的。
这将产生一个介于 lowerRange 和 upperRange 之间的随机数,包括在内。
请记住,arc4random()函数生成的是一个伪随机数,这意味着它不是真正的随机数,但在大多数人看来是随机的。如果你需要一个真正的随机数,你可能要考虑使用不同的方法,例如使用硬件随机数生成器来生成随机数。
生成随机数
所有数字数据类型都支持在指定范围内生成随机数。你可以根据你的要求指定值的范围(下限和上限)。让我们看一下一些例子。
示例
import Foundation
// 1
// print random value from 1 to 99
let randomInt = Int.random(in: 1...99)
print("random int: \(randomInt)")
// 2
// get a random value from -10 and below to 10
let randomSignedInt = Int.random(in: -10..<10)
print("random signed int: \(randomSignedInt)")
// 3
// get a random float value from 0 to 1. Eg: 0.5673451
let randomFloat = Float.random(in: 0...5)
print("random float: \(randomFloat)")
// 4
// get true or false randomly
let randomBool = Bool.random()
print("random bool: \(randomBool)")
输出
random int: 46
random signed int: -6
random float: 1.2532961
random bool: true
让我们来理解上面的例子
第1步–这里我们通过传递1到99的范围来生成一个随机Int,所以它总是会返回一个相同范围内的数字。
第2步 – 在这里,它将从给定的范围内返回一个随机数Int,即-10到低于10。
第3步 – 在这里,它将返回一个在给定范围内的随机浮动值,即0到5。
第4步 – 在这里,它将返回一个随机的Bool值,可以是真也可以是假。
从集合中生成随机值
使用Swift的randomElement()方法,我们可以从一个
集合类型。很多时候,你需要从你的集合中返回随机对象。
在跳到例子之前,让我们注意一下这里的一个要点。randomElement()函数返回一个集合类型的可选值。建议使用像下面这样的if-let或guard语句来解包返回值,因为它有时会返回一个空值。
示例
我们将在所有的例子中使用可选的绑定。比如说。
// Get a random value from an array
import Foundation
let languages: [String] = ["Java", "C/C++", "Swift", "Python", "JavaScript"]
if let randomLanguage = languages.randomElement() {
print("randomLanguage: \(randomLanguage)")
}
输出
randomLanguage: Python
结论
在Swift 4.2之前,开发者使用arc4random_uniform(n)函数来获取随机值。这个函数是基于C语言风格的。
虽然Swift 4.2及更高版本中的随机()方法让开发者更容易安全有效地生成随机值。因此,我们可以编写更安全、更可靠的代码。