尝试将文本分配给标签时出现预期声明错误

时间:2018-05-29 09:50:05

标签: ios swift

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

这是我的代码

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

1 个答案:

答案 0 :(得分:0)

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

其次,你不应该在一个很少有意义的函数中声明一个类。

最后,如果您正在为其分配值,请不要将任何内容声明为隐式展开的可选项(UILabel!)。

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

这是使用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"