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

使用Array(repeating:, count:)创建UILabel数组,为何添加后视图仅1个子视图?

为什么添加数组中7个UILabel后,视图子视图数量只有1?

这问题我之前也踩过坑!核心原因是你用的Array(repeating: UILabel(), count: 7)并没有创建7个独立的UILabel实例——它只是把同一个UILabel对象重复放进数组里7次而已。

让我拆解下这个过程:

  • 当你调用Array(repeating: UILabel(), count: 7)时,首先会执行一次UILabel()创建一个标签实例,然后把这个实例的引用复制7遍填充到数组中。所以数组里的7个元素其实指向的是内存中同一个对象。
  • 当你遍历数组把每个元素添加到view的子视图时,本质上是在重复添加同一个UILabel。而UIKit的视图层级规则是:一个视图同一时间只能属于一个父视图,重复添加同一个视图的话,UIKit不会创建多个副本,后续的添加操作实际上不会改变子视图的数量,因为这个标签已经是当前view的子视图了。所以最终view的subviews里只有这一个UILabel实例。

要解决这个问题,你需要创建7个独立的UILabel实例,正确的写法可以用数组的map初始化方式:

let labels = (0..<7).map { _ in UILabel() }

这个写法会循环7次,每次都调用UILabel()创建一个全新的实例,这样数组里的每个元素都是不同的对象,添加到view后,view.subviews.count就会变成7了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:52:15