Ios 尝试将文本指定给标签时出现预期的声明错误

Ios 尝试将文本指定给标签时出现预期的声明错误,ios,swift,Ios,Swift,我正在尝试创建一个包含其他标签的标签类 这是我的密码 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() class mainLabel: UILabel{ var top: UILabel! = UILabel() top.text = "te

我正在尝试创建一个包含其他标签的标签类

这是我的密码

import UIKit

class ViewController: UIViewController {


    override func viewDidLoad() {
        super.viewDidLoad()


        class mainLabel: UILabel{
            var top: UILabel! = UILabel()
            top.text = "text" //*Expected declaration error
            var down: UILabel! = UILabel()
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

您的代码有几个问题。您收到的错误是因为您只能在类范围内声明变量或函数,并且使用
top.text
尝试在函数范围外修改类的实例属性,这是不允许的

其次,你不应该在一个几乎没有意义的函数中声明一个类

最后,如果要立即为其赋值,请不要将任何内容声明为隐式展开的可选(
UILabel!

有几种方法可以创建一个可重用的UI元素,该元素由2个
UILabel
组成,并且可以通过编程方式创建。您可以将
UIStackView
子类化以自动处理布局,或者如果您想要更多的控制,只需将
UIView
子类化,将2个
UILabel
添加为
子视图
并通过编程方式添加自动布局约束来处理布局

下面是一个使用
UIStackView
子类的解决方案。修改任何属性以满足您的确切需要,这只是为了演示

class MainLabel: UIStackView {
    let topLabel = UILabel()
    let bottomLabel = UILabel()
    override init(frame: CGRect) {
        super.init(frame: frame)
        axis = .vertical
        distribution = .fillEqually
        addArrangedSubview(topLabel)
        addArrangedSubview(bottomLabel)
        topLabel.textColor = .orange
        topLabel.backgroundColor = .white
        bottomLabel.textColor = .orange
        bottomLabel.backgroundColor = .white
    }

    required init(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
操场测试:

PlaygroundPage.current.needsIndefiniteExecution = true
let mainLabel = MainLabel(frame: CGRect(x: 0, y: 0, width: 300, height: 200))
PlaygroundPage.current.liveView = mainLabel
mainLabel.topLabel.text = "Top"
mainLabel.bottomLabel.text = "Bottom"

我正在努力学习本教程,您的代码有几个问题。您收到的错误是因为您只能在类范围内声明变量或函数,并且使用
top.text
尝试在函数范围外修改类的实例属性,这是不允许的。其次,你不应该在一个几乎没有意义的函数中声明一个类。最后,如果要立即为其赋值,请不要将任何内容声明为隐式展开的可选(
UILabel!
)。如果没有更多的上下文,就很难理解你想用什么来实现,所以很难用代码给出答案。我正在尝试创建一个包含多个标签的预制对象。所以我可以随时调用它。我走对了吗?我试图通过代码创建一个标签,而不是从对象库中拖拽它。有人能给我举个例子吗。我不知道该怎么做,甚至不知道搜索解决方案的术语。这种情况下的主要挑战是如何处理布局。可以通过编程方式添加自动布局约束,也可以将
UILabel
s添加到堆栈视图中。