ios - 随 secret 码生成器 Swift 3?

标签 ios swift swift3

我正在为 iOS 构建一个随 secret 码生成器。其中,一个按钮生成一个随 secret 码,该密码具有用户选择的特征(例如,切换以打开或关闭小写和大写字母、字符和符号等)。

UI 看起来很棒,其余代码运行顺利,但我无法让我的按钮实际生成随机字母数字字符串。我有一个带有一些占位符文本(“您的密码”)的标签,按下按钮时应该将其文本更新为随机字符串,但我收到编译器错误:“ Unresolved 标识符‘长度’的使用”

这是按钮的当前代码:

@IBAction func generatePassword(_ sender: UIButton) {

    let randomPasswordArray: NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
    let len = UInt32(randomPasswordArray.length)

    var randomPassword = ""

    for _ in 0 ..< length {
        let rand = arc4random(len)
        var nextChar = randomPasswordArray.character(at: Int(rand))
        randomPassword += NSString(characters: &nextChar, length: 1) as String
    }

    passwordLabel.text = "randomPassword"
}

谢谢!

最佳答案

首先用你的密码允许的字符创建一个数组

let passwordCharacters = Array("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".characters)

然后选择密码长度

let len = 8 

定义和空字符串密码

var password = ""

创建一个循环来生成你的随机字符

for _ in 0..<len {
    // generate a random index based on your array of characters count
    let rand = arc4random_uniform(UInt32(passwordCharacters.count))
    // append the random character to your string
    password.append(passwordCharacters[Int(rand)])
}
print(password)   // "V3VPk5LE"

swift 4

您还可以使用 map 代替标准循环:

let pswdChars = Array("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
let rndPswd = String((0..<len).map{ _ in pswdChars[Int(arc4random_uniform(UInt32(pswdChars.count)))]})
print(rndPswd)   // "oLS1w3bK\n"

swift 4.2

使用新集合的 randomElement() 方法:

let len = 8
let pswdChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
let rndPswd = String((0..<len).compactMap{ _ in pswdChars.randomElement() })
print(rndPswd)   // "3NRQHoiA\n"

关于ios - 随 secret 码生成器 Swift 3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41730933/

相关文章:

objective-c - 如何在 View 加载时显示 map View 标注

ios - 如何使用 Swift 中的协议(protocol)和委托(delegate)将变量从 UIViewController 传递回根导航 Controller

ios - 子类对象在 swift 中不显示父类变量

ios - 避免创建多个 ViewController 实例,iOS Swift

swift 3 : How to get text from individual textfields that are in different collectionView cells?

ios - 在 Swift 中执行 POST 请求

html - IOS 上的标题图像放置

ios - 在 Xcode 6 上的 iPad Mini Retina 上运行应用程序

java - 使用 Swift 启动轻量级 Web 服务器以在 iOS App 中接收 OAuth1.0 回调

xcode - NSImages 到 PDF 并在 Swift 中合并它们