具有循环的重复UILabel的更新值

问题描述:

我有标签可以保存数组的名称和值items = [MyItems]()。凡具有循环的重复UILabel的更新值

struct MyItems { 
    name: String! 
    value: Int! 
} 

标签是titleLabel1valueLabel1。我有这些标签中的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

我想你想为每个案例使用不同的标签而不是相同的? – Eendje

+0

你想让每个案例有不同的标签吗?还是你想每秒更新标签内容? – brimstone

有一个数组标签:

let titleCollection = [titleLabel1, titleLabel2, titleLabel3, titleLabel4, titleLabel5, titleLabel6] 
let valueCollection = [valueLabel1, valueLabel2, valueLabel3, valueLabel4, valueLabel5, valueLabel6] 

使用zip包广告d文本安全标签:

zip(titleCollection, items).forEach { $0.0.text = $0.1.name } 
zip(valueCollection, items).forEach { $0.0.text = String($0.1.value) } 

您应该使用的@IBOutlet集合或在阵列中的文本字段。我相信有一种方法可以使用String来访问您的属性,但从我读过的内容来看,它不可靠或不可用,因此我不建议您这样做。如果我错了,请纠正我。

+0

当我问这个问题时,我非常怀疑,但我只是说,所以我永远不会惊讶于我。这完美地工作。我有不同的UILabel网点,我想分配不同的值,这就是为什么@GabrielJones的建议不适用于我,即使它可能适用于他建议的场景。谢谢。 – tew

如果你经历了许多标签试图循环,并改变它们的值,你可以试试这个:

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++ 
}