You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:57:03