2017-01-18 2 views
1

私はiOSのためのランダムなパスワードジェネレータを構築しています。その中で、ボタンは、ユーザによって選択された特性を有するランダムなパスワードを生成する(例えば、小文字および大文字、文字および記号などのスイッチをオンまたはオフにするスイッチ)。ランダムパスワードジェネレータSwift 3?

UIはすばらしく、残りのコードはスムーズに機能していますが、実際にはランダムな英数字の文字列を生成するためのボタンが表示されません。ボタンを押したときにテキストがランダムな文字列に更新されるはずのプレースホルダテキスト( "Your Password")を持つラベルがありますが、コンパイラエラーが発生します: "識別子の長さが未定義です"

ここ

はボタンの現在のコードは次のとおりです。

@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

ので、 'length'を定義しましたか? –

答えて

7

まず文字

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" 

スウィフトをgennerateするループを作成する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

歓迎している私は必要な時にパスワードの二次的な要件を満たすために簡単ですので、数字、記号、別の文字列内の大文字と小文字の手紙を持っている方が良いと思います。 –