2017-01-18 227 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

我認爲在不同字符串中使用數字,符號,大寫和小寫字母比較合適,因此在需要時更容易滿足密碼的二級要求。 –