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函数的主要内容,如果未能解决你的问题,请参考以下文章
将UILabel子类从Objective-C转换为Swift
如何覆盖子类的 swift 协议函数(例如 UIView 中的 UILabel)