我的随机小写字符串生成器函数缺少什么?使用 Swift 5.5
What am I missing in my random lowercase string generator function ? Using Swift 5.5
我有一个函数可以用来为电子邮件地址或密码生成随机字符串(例如)。原来是这样设置的:
static func random(length: Int) -> String {
let characters = "abcdefghijklmnopqrstuvwxyz"
return String((0..<length).map { _ in characters.randomElement()! })
}
所以我改成这样:
static func random(length: Int) -> String {
let characters = CharacterSet.lowercaseLetters
return String((0..<length).map { _ in characters.randomElement()! })
}
但我收到一条错误消息“'CharacterSet' 类型的值没有成员 'randomElement'。
我是 Swift 的新手,我已经进行了大量搜索,但到目前为止我还没有找到好的解决方案。我想让这个功能简短而有趣。我已经这样做了一段时间了。任何帮助将不胜感激!如果需要更多上下文,请告诉我。
编辑:我的问题已关闭,因为它被视为重复问题,但我查看了解决方案页面并尝试将其应用于我的问题,但仍然没有解决方案。我不确定那是因为之前的答案来自 2015 年及更早,还是针对 obj-c
正如我在对可能重复的 post 的评论中所说,您可以使用已接受答案的扩展名从 CharacterSet 中获取所有字符,并从生成的集合中获取 randomElement。同样如接受的答案中所述,用于显示结果的字体中可能不存在某些字符:
extension CharacterSet {
var array: [Character] {
var result: [Character] = []
for plane: UInt8 in 0...16 where hasMember(inPlane: plane) {
for unicode in UInt32(plane) << 16 ..< UInt32(plane + 1) << 16 {
if let uniChar = UnicodeScalar(unicode), contains(uniChar) {
result.append(Character(uniChar))
}
}
}
return result
}
}
let lowercaseLettersArray = CharacterSet.lowercaseLetters.array
let randomCharacter = lowercaseLettersArray.randomElement()! // "ᵳ"
我有一个函数可以用来为电子邮件地址或密码生成随机字符串(例如)。原来是这样设置的:
static func random(length: Int) -> String {
let characters = "abcdefghijklmnopqrstuvwxyz"
return String((0..<length).map { _ in characters.randomElement()! })
}
所以我改成这样:
static func random(length: Int) -> String {
let characters = CharacterSet.lowercaseLetters
return String((0..<length).map { _ in characters.randomElement()! })
}
但我收到一条错误消息“'CharacterSet' 类型的值没有成员 'randomElement'。
我是 Swift 的新手,我已经进行了大量搜索,但到目前为止我还没有找到好的解决方案。我想让这个功能简短而有趣。我已经这样做了一段时间了。任何帮助将不胜感激!如果需要更多上下文,请告诉我。
编辑:我的问题已关闭,因为它被视为重复问题,但我查看了解决方案页面并尝试将其应用于我的问题,但仍然没有解决方案。我不确定那是因为之前的答案来自 2015 年及更早,还是针对 obj-c
正如我在对可能重复的 post 的评论中所说,您可以使用已接受答案的扩展名从 CharacterSet 中获取所有字符,并从生成的集合中获取 randomElement。同样如接受的答案中所述,用于显示结果的字体中可能不存在某些字符:
extension CharacterSet {
var array: [Character] {
var result: [Character] = []
for plane: UInt8 in 0...16 where hasMember(inPlane: plane) {
for unicode in UInt32(plane) << 16 ..< UInt32(plane + 1) << 16 {
if let uniChar = UnicodeScalar(unicode), contains(uniChar) {
result.append(Character(uniChar))
}
}
}
return result
}
}
let lowercaseLettersArray = CharacterSet.lowercaseLetters.array
let randomCharacter = lowercaseLettersArray.randomElement()! // "ᵳ"