我有标签,其中包含数组items = [MyItems]()
的名称和值。哪里
struct MyItems {
name: String!
value: Int!
}
标签为titleLabel1
和valueLabel1
。我有6个这样的标签从数组中取一个值超过6的值。
目前我使用的是for
循环:
var items = [MyItems]()
func viewDidLoad() {
super.viewDidLoad()
items = loadItemsFromAPI()
populateFields()
}
func populateFields() {
for var i = 0; i < 6 && i < items.count; i++ {
switch i {
case 0:
titleLabel1.text = items[i].name
valueLabel1.text = "items[i].value"
case 1:
titleLabel1.text = items[i].name
valueLabel1.text = "items[i].value"
case 2:
titleLabel1.text = items[i].name
valueLabel1.text = "items[i].value"
case 3:
titleLabel1.text = items[i].name
valueLabel1.text = "items[i].value"
case 4:
titleLabel1.text = items[i].name
valueLabel1.text = "items[i].value"
case 5:
titleLabel1.text = items[i].name
valueLabel1.text = "items[i].value"
default:
print("Unexpected value encounteredValue: \(i)")
break
}
}
}
我的问题是,有没有办法循环标签来分配值而不是这种冗长的方式?
喜欢
for var i = 0; i < 6; i++ {
titleLabel + "i-1".text = items[i].name
}
从理论上说,只有在可能有一个简短的清洁代码的情况下,我才会想到这一点。
答案 0 :(得分:2)
将标签放在数组中:
let titleCollection = [titleLabel1, titleLabel2, titleLabel3, titleLabel4, titleLabel5, titleLabel6]
let valueCollection = [valueLabel1, valueLabel2, valueLabel3, valueLabel4, valueLabel5, valueLabel6]
使用zip将文本安全地添加到标签中:
zip(titleCollection, items).forEach { $0.0.text = $0.1.name }
zip(valueCollection, items).forEach { $0.0.text = String($0.1.value) }
您应该使用@IBOutlet
的集合或在数组中包含文本字段。我相信有一种方法可以使用String
来访问您的媒体资源,但是从我读过的内容来看,它不可靠或没有意图,因此我不建议您这样做。如果我错了,请纠正我。
答案 1 :(得分:1)
如果您尝试循环浏览多个标签并更改其值,则可能需要尝试此操作:
var i = 0
for view in self.view.subviews {
if view is UILabel {
titleLabel.text = items[i]
valueLabel.text = items[i]
i++
}
}
或者,如果您尝试快速更新1个标签的文本,那么您应该使用NSTimer:
NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "update", userInfo: nil, repeats: true)
var i = 0
func update() {
labels.text = items[i]
i++
}