我的随机小写字符串生成器函数缺少什么?使用 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()!  // "ᵳ"