Swift Array - "Int.random(in: 0...25)" 和 "randomElement()" 之间的区别

AWS*_*Mpb 5 arrays random swift

我最近开始通过在线课程快速学习。

我被赋予了从包含字符的给定数组中生成密码的任务。我们主要学习了两个代码示例,随机选择一个。

  1. variable[Int.random(in: 0...25)]
  2. variable.randomElement()

当从数组中拉出一个元素时,两者都可以正常工作,但variable[Int.random(in: 0...25)在多次与加号 (+) 组合时只能使用“ ”。

这是为什么?


我查阅了文档但找不到答案

https://developer.apple.com/documentation/swift/array/2994747-randomelement


解释:

此代码有效:

let alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]

//The number of letters in alphabet equals 26
var password = alphabet[Int.random(in: 0...25)] + alphabet[Int.random(in: 0...25)] + alphabet[Int.random(in: 0...25)] + alphabet[Int.random(in: 0...25)] + alphabet[Int.random(in: 0...25)] + alphabet[Int.random(in: 0...25)]  

print(password)
Run Code Online (Sandbox Code Playgroud)

此代码不起作用,因为“randomElement()”在将多个与加号组合后变灰(为什么?)

let alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]

//The number of letters in alphabet equals 26
var password = alphabet.randomElement() + alphabet.randomElement() + alphabet.randomElement() + alphabet.randomElement() + alphabet.randomElement() + alphabet.randomElement()  

print(password)
Run Code Online (Sandbox Code Playgroud)

编辑:感谢您的快速解释!

Swe*_*per 8

区别在于randomElement返回可选字符串 ( String?),而不是返回非可选的下标。为什么randomElement返回可选字符串?那么,如果数组为空呢?

而且 Swift 无法弄清楚如何添加 2 个可选字符串(更不用说 6 个了!所以它就放弃了)。解决此问题的一种方法是强制解包 的返回值randomElement

let password = alphabet.randomElement()! + alphabet.randomElement()! + alphabet.randomElement()! + alphabet.randomElement()! + alphabet.randomElement()! + alphabet.randomElement()!
Run Code Online (Sandbox Code Playgroud)

我们知道数组不是空的,所以我们可以在这里安全地强制解包。

可以说,randomElement这里使用的是更好的方法,因为它迫使您考虑数组为空的情况,并相应地处理它。带下标的第一种方法没有检查数组是否为空,或者索引是否正确等。