2017-01-18 229 views
1

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

用户界面看起来不错,其余的代码运行正常,但我无法让我的按钮实际上生成一个随机的字母数字字符串。我有一个带有一些占位符文本(“您的密码”)的标签,当按钮被按下时,它应该将其文本更新为随机字符串,但是我收到编译器错误:“未解析的标识符使用长度”“

以下是该按钮的当前代码:

@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" 
} 

谢谢!

+1

那么,你定义了“长度”吗? –

回答

7

首先用您的密码允许的字符

let passwordCharacters = Array("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".characters) 

然后选择密码lenght数组

let len = 8 

定义和空字符串密码

var password = "" 

创建一个循环来gennerate您的随机字符

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" 

斯威夫特4

您还可以使用,而不是一个标准的循环图:

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

解决了它。我忘记了我使用“len”而不是“长度”。现在修复它,谢谢你的帮助。 –

+0

欢迎您 –

+0

我认为在不同字符串中使用数字,符号,大写和小写字母比较合适,因此在需要时更容易满足密码的二级要求。 –