使用循环

时间:2016-02-12 01:22:20

标签: ios swift loops uilabel

我有标签,其中包含数组items = [MyItems]()的名称和值。哪里

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
}

从理论上说,只有在可能有一个简短的清洁代码的情况下,我才会想到这一点。

2 个答案:

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