如何为UILabel传入新数据而非追加内容,解决点击生成按钮密码逐次变长问题
问题原因
你定义的password是当前ViewController的全局存储属性,值会在页面生命周期内持续留存。每次点击生成按钮执行循环时,都是在上一次生成的密码字符串后追加新随机字符,所以长度会不断增加。
修复方案
方案1:修改原有逻辑,生成前清空旧密码
每次触发按钮点击事件时先清空password的原有值,再拼接新的随机字符,同时优化Label赋值逻辑,避免循环内重复刷新UI:
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) { // 每次生成前先清空旧密码 password = "" for _ in 1...6 { password += lettersAndNumbers.randomElement()! } // 循环结束后一次性给Label赋值 passwordText.text = password } }
方案2:简化写法,无需依赖全局变量存储密码
如果其他地方不需要复用password变量,可以直接生成新密码赋值给Label,不用额外维护全局变量,同时用compactMap避免强制解包更安全:
@IBAction func generateButton(_ sender: UIButton) { let newPassword = (1...6).compactMap { _ in lettersAndNumbers.randomElement() }.joined() passwordText.text = newPassword }
内容的提问来源于stack exchange,提问作者Richard Clegg
相关产品推荐
相关产品推荐

