0

每次我点击生成密码都会变大,每次按下按钮时如何更改字符串?

import UIKit

class ViewController: UIViewController {
    
    let lettersAndNumbers = ["a", "b", "c", "d", "e", "1", "2", "3"]
    
    var password: String = ""
    
    @IBOutlet weak var passwordText: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func generateButton(_ sender: UIButton) {
        for _ in 1...6 {
            password += lettersAndNumbers.randomElement()!
            passwordText.text = password
        }
    }
}
4

3 回答 3

1

每次generateButton调用时,您只需附加 6 个新字符。

您需要password在添加字符之前重置。

@IBAction func generateButton(_ sender: UIButton) {
    password = ""
    for _ in 1...6 {
        password += lettersAndNumbers.randomElement()!
    }
    passwordText.text = password
}

与您的问题无关,但您不需要在循环的每次迭代中更新文本字段,您只需要在password更新后执行一次。

您也可以完全摆脱循环,使用compactMap然后在一行joined中更新password,因此您不需要重置它,您可以直接分配新值。

@IBAction func generateButton(_ sender: UIButton) {
    password = (1...6).compactMap { _ in lettersAndNumbers.randomElement() }.joined()
    passwordText.text = password
}
于 2021-08-31T13:20:42.307 回答
1

将您的generateButton代码替换为这个。

@IBAction func generateButton(_ sender: UIButton) {
        for _ in 1...6 {
            password += lettersAndNumbers.randomElement()!
        }
            passwordText.text = password
    }
于 2021-08-31T13:29:15.793 回答
0

您可以didSet在密码更改时更改标签的文本。立即调用 didSet after the new value is saved

var password: String = "" {
  didSet {
    passwordText.text = password
  }
} 
@IBAction func generateButton(_ sender: UIButton) {
        for _ in 1...6 {
            password += lettersAndNumbers.randomElement()!
        }
    }
于 2021-09-01T07:54:46.410 回答