我面临两个问题。我想创建一个UILabel
数组。
我尝试过:
private var weekdayLabels = [DayLabel](repeating: DayLabel(), count: 7)
,
但是它使用DayLabel()
的相同实例。
我最终使用了另一个丑陋的解决方案:
(0...6).forEach { _ in
weekdayLabels.append(DayLabel())
}
有没有办法让[DayLabel](repeating: DayLabel(), count: 7)
工作?
第二个问题是在将具有工作日名称的String
数组映射到我的[UILabel]
数组时:
weekdayLabels.enumerated().forEach {
$0.element.text = weekdayNames[$0.offset]
}
我相信必须有一种更好的方法将String
映射到UILabel().text
。我说的对吗?
答案 0 :(得分:2)
Array(repeating:count:)
确实意味着重复。 repeating
参数的表达式仅计算一次。请改用(0..<count).map
。
使用zip
将每个标签与相应的字符串配对。
代码:
weekDayLabels = (0..<7).map { _ in DayLabel() }
let weekDayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
zip(weekDayLabels, weekDayNames).forEach { label, dayName in
label.text = dayName
}
答案 1 :(得分:0)
您是否尝试过将weekdayLabels数组声明为private lazy var
?
过去,我在声明其他UIKit对象的数组时遇到了问题(假设因为故事板可能已将其实例化或未将其实例化),所以不得不诉诸以下内容来访问{{1 }}(自定义的,可切换的ToggleButton
实现),位于可选的按钮数组中:
UIButton