如何在苹果的Swift语言中生成随机数?


本文将解释如何在Swift语言中生成随机数。

在您的iOS应用程序中,有一些常见的情况需要生成随机值,例如:

  • 模拟掷骰子。

  • 洗牌。

  • 为用户创建唯一ID。

  • 从集合类型中获取随机值。

在Swift 4.2中,有新的、简单且安全的方法来生成随机值。在此之前,有一个用C语言编写的随机函数。今天,您将学习关于`random()`函数的知识,该函数接受一个值范围,并作为输出,每次返回一个随机选择的数值。

如何使用Arc4random()函数

让我们来看一个arc4random()函数的例子

要在Swift中生成随机数,您可以使用`arc4random()`函数,该函数生成0到`UInt32.max`之间的随机数。例如:

import Foundation
let randomNumber = arc4random()
print(randomNumber)

注意:输出在每种情况下都是随机的。

这将生成0到`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 - 这里,它将返回给定范围(即-10到小于10)内的随机整数。

步骤3 - 这里,它将返回给定范围(即0到5)内的随机浮点数。

步骤4 - 这里,它将返回一个随机布尔值,可以是true或false。

从集合中生成随机值

使用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及更高版本中的`random()`方法使开发人员能够更轻松、更安全有效地生成随机值。因此,我们可以编写更安全、更可靠的代码。

更新于:2023年1月2日

373 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.