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

Swift嵌套循环创建按钮时数组元素重复(预期27个实际54个)

问题分析与解决

你贴的这段代码逻辑本身没问题——3行×9列的循环刚好执行27次,每次创建一个按钮并添加到数组,正常情况下数组应该只有27个元素。出现54个的原因,大概率是这段按钮创建的代码被执行了两次。

排查方向

  • 检查代码所在位置:比如是不是同时在viewDidLoad和viewWillAppear里都写了这段代码,或者手动调用了viewDidLoad方法
  • 检查视图控制器实例:是不是你的视图控制器被初始化了两次,导致这段代码被执行了两遍
  • 检查数组状态:确认letterButtonsArray是不是在代码执行前真的为空,如果之前没清空,第二次执行时会在原有27个基础上再添加27个

解决办法

  1. 确保代码只执行一次:把这段按钮创建的逻辑放在只会执行一次的方法里,比如viewDidLoad,不要在viewWillAppear这类会重复触发的方法里写。
  2. 添加前置清理逻辑(防止意外重复执行):在循环开始前,先清空数组并移除已经添加到界面上的按钮,避免重复添加:
// 先清理旧按钮和数组
letterButtonsArray.forEach { $0.removeFromSuperview() }
letterButtonsArray.removeAll()

// 原按钮创建逻辑
let width = 80
let height = 60
    
for row in 0..<3{
    for col in 0..<9{
        let letterButton = UIButton(type: .system)
        letterButton.titleLabel?.font = UIFont.systemFont(ofSize: 36)
        letterButton.setTitle("A", for: .normal)
        let frame = CGRect(x: col*width, y: row*height, width: width, height: height)
        letterButton.frame = frame
        buttonView.addSubview(letterButton)
        letterButtonsArray.append(letterButton)
            
    }
}

内容的提问来源于stack exchange,提问作者A A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:10:40