Swift UILabel子类自动调用enum switch函数

问题描述 投票:0回答:1

我一直在创建一个名为RPLabel的UILabel类,它应该缩短我所有的编程设置标签列表。这是类代码:

class RPLabel: UILabel {

    //    moneyTitle.frame = CGRect(x: 50, y: -50, width:XX, height: 35)  //

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        self.setup()
        self.testForLabelType()

    }

    enum labelTypeEnumeration {
        case title, subtitle
    }

    var labelType = labelTypeEnumeration.title

    override init(frame: CGRect){
        super.init(frame: frame)
        self.setup()



    }



    override func awakeFromNib() {
        super.awakeFromNib()
        self.setup()

    }

    func setup(){
        self.text = self.text
        self.textColor = self.textColor
        self.font = self.font
        self.layer.display()
    }



    func testForLabelType() {

        switch labelType {
        case .title:
            setupTitle()
            print("setupTitle")
        case .subtitle:
            setupSubtitle()
            print("setupSubtitle")
        }

    }

    func setupTitle(){
        self.font = UIFont.boldSystemFont(ofSize: 12)
        self.textColor = UIColor.secondaryColor()
        self.textAlignment = .left

    }

    func setupSubtitle(){
        self.font = UIFont.boldSystemFont(ofSize: 18)
        self.textColor = UIColor.rgb(red: 200, green: 200, blue: 200)
        self.textAlignment = .left

    }



}

要制作标签,我使用以下代码:

var moneyTitle = RPLabel()
    moneyTitle.labelType = .title
    moneyTitle.testForLabelType()
    moneyTitle.text = "MONEY"
    moneyTitle.frame = CGRect(x: 50, y: -50, width:XX, height: 35)

我遇到的问题是我想将labelType设置为.title而不必编写moneyTitle.testForLabelType()。换句话说,我希望该函数在类中自动运行。我不喜欢的替代方案是在init中插入参数,所以请避免告诉我这样做,谢谢。

ios swift class enums uilabel
1个回答
1
投票

你可以使用didSet:

存储新值后立即调用didSet。

var labelType = labelTypeEnumeration.title {
    didSet {
        testForLabelType()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.