Вместо того, чтобы использовать именованные переменные, вы можете просто создать массив меток:
let labels = (0..<3).map { _ in UILabel() }
Или вы также можете настроить их по мере их создания:
let labels = (0..<3).map { _ -> UILabel in
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
return label
}
Вы можетесделайте любую другую их конфигурацию, которую вы хотите в этом замыкании.
Теперь вы можете использовать их. Например, вы можете добавить их в ваше представление, которое уже имеет вертикальное представление стека (которое избавляет вас от необходимости вручную добавлять ограничения для каждой метки), например так:
func viewDidLoad() {
super.viewDidLoad()
for label in labels {
stackView.addArrangedSubview(label)
}
}
И если вы хотитеустановить текст для этих меток:
labels[0].text = "Dave"
labels[1].text = "Paul"
labels[2].text = "Sam"
Вот игровая площадка, которая иллюстрирует вышесказанное:
import UIKit
import PlaygroundSupport
class ViewController: UIViewController {
let stackView: UIStackView = {
let stackView = UIStackView()
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .vertical
return stackView
}()
let labels = (0..<3).map { _ -> UILabel in
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
return label
}
override func viewDidLoad() {
super.viewDidLoad()
addStackView()
addLabels()
updateLabels()
}
}
private extension ViewController {
func addStackView() {
view.addSubview(stackView)
NSLayoutConstraint.activate([
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
}
func addLabels() {
for label in labels {
stackView.addArrangedSubview(label)
}
}
func updateLabels() {
labels[0].text = "Dave"
labels[1].text = "Paul"
labels[2].text = "Sam"
}
}
PlaygroundPage.current.liveView = ViewController()
Теперь, если это было правильное приложение, а не игровая площадкаЯ бы, вероятно, просто добавил в IB представление стека с @IBOutlet
вместо того, чтобы делать это программно, но я просто хотел проиллюстрировать эту идею.