Update: This works properly in Xcode now – “Outlet Collection” is one of the connection options in Interface Builder, which creates something that looks like:
@IBOutlet var labelCollection: [UILabel]!
While we’re waiting for a fix, you can approximate this using a computed property. Let’s say my view has five UILabels
that I want in a collection. I still have to declare each one, but then I also declare a computed property that collects them:
class MyViewController {
@IBOutlet var label1 : UILabel
@IBOutlet var label2 : UILabel
@IBOutlet var label3 : UILabel
@IBOutlet var label4 : UILabel
@IBOutlet var label5 : UILabel
var labels: UILabel![] { return [label1, label2, label3, label4, label5] }
Kind of annoying, but from then on we can treat the labels
property as if it were an IBOutletCollection
, and won’t have to change the rest of our code once the bug is fixed:
override func viewDidLoad() {
super.viewDidLoad()
for (index, item) in enumerate(self.labels) {
item.text = "Label #\(index)"
}
}