gpt4 book ai didi

arrays - 在 swift 中将 var 声明为一个组

转载 作者:行者123 更新时间:2023-11-28 13:23:23 26 4
gpt4 key购买 nike

我想像这样声明一组相同的对象。

var dave, paul, sam = UILabel()

我尝试了很多东西。但是除了标准之外,我无法做任何不同的事情来声明变量。

var dave = UILabel()
var paul = UILabel()
var sam = UILabel()

我认为必须有某种方式将其放入数组中以加快该过程。

最佳答案

您可以创建一个标签数组,而不是使用命名变量:

let labels = (0..<3).map { _ in UILabel() }

或者您也可以在创建它们时配置它们:

let labels = (0..<3).map { _ -> UILabel in 
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
return label
}

您可以在该闭包中对它们进行任何其他配置。

现在您可以使用它们了。例如,您可以将它们添加到已经具有垂直堆栈 View 的 View 中(这使您摆脱了为每个标签手动添加约束的业务),如下所示:

func viewDidLoad() {
super.viewDidLoad()

for label in labels {
stackView.addArrangedSubview(label)
}
}

如果您想为这些标签设置文本:

labels[0].text = "Dave"
labels[1].text = "Paul"
labels[2].text = "Sam"

这是一个说明上述内容的 Playground :

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()

现在,如果这是一个合适的应用程序而不是 Playground ,我可能只是在 IB 中添加堆栈 View ,使用 @IBOutlet,而不是以编程方式进行,但我只是想来说明这个想法。

关于arrays - 在 swift 中将 var 声明为一个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58758006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com