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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift UILabel子类自动调用enum switch函数相关的知识,希望对你有一定的参考价值。

我一直在创建一个名为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中插入参数,所以请避免告诉我这样做,谢谢。

答案

你可以使用didSet:

存储新值后立即调用didSet。

var labelType = labelTypeEnumeration.title {
    didSet {
        testForLabelType()
    }
}

以上是关于Swift UILabel子类自动调用enum switch函数的主要内容,如果未能解决你的问题,请参考以下文章

swift UILabel子类使得设置填充非常容易。

将UILabel子类从Objective-C转换为Swift

如何覆盖子类的 swift 协议函数(例如 UIView 中的 UILabel)

覆盖 UILabel setText: Swift 中的方法

使用约束时不显示 UILabel 子类

Swift - 根据其内容自动布局 UILabel 高度