Objective C Setter在Swift中重载

我需要重写我的自定义UIButton子类UIViews高亮属性的setter;

目标C

@property(nonatomic,getter=isHighlighted) BOOL highlighted; 

像这样重写

 - (void) setHighlighted:(BOOL)highlighted { [super setHighlighted:highlighted]; if (highlighted) { self.backgroundColor = UIColorFromRGB(0x387038); } else { self.backgroundColor = UIColorFromRGB(0x5bb75b); } [super setHighlighted:highlighted]; } 

迅速

 var highlighted: Bool 

我试过了:

 var highlighted: Bool { get{ return false } set { if highlighted { self.backgroundColor = UIColor.whiteColor() //Error "Use unresolved identifier 'self'" I can't set the background color from value type in here , can't call self.backgroundColor in this value type , can't call super too because this is a value type , doesn't work } } } 

如何和在哪里应该在Swift中实现这个方法来获得相同的结果。 任何想法?

Swift中 ,上面的解决scheme适用于我,但我必须省略 Bool = true

 import UIKit class CustomUIButtonForUIToolbar: UIButton { // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func drawRect(rect: CGRect) { // Drawing code super.drawRect(rect) self.layer.borderColor = UIColor.blueColor().CGColor self.layer.borderWidth = 1.0 self.layer.cornerRadius = 5.0 self.clipsToBounds = true self.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal) self.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Highlighted) } override var highlighted: Bool { didSet { if (highlighted) { self.backgroundColor = UIColor.blueColor() } else { self.backgroundColor = UIColor.clearColor() } } } } 

这里有一些事情是错误的,但这个解决scheme应该可以帮助你…

在你的情况下,因为你不是真的想高亮显示variables的计算值,而是所有你想要知道当突出显示改变,你应该使用willSetdidSet

为你的情况, didSet

它看起来像这样

 var highlighted:Bool = false { didSet { // You can use 'oldValue' to see what it used to be, // and 'highlighted' will be what it was set to. if highlighted { self.backgroundColor = UIColor.whiteColor() } else { self.backgroundColor = UIColor.blackColor() } } } 

请记住,初始值设置为false,但初始化variables不会调用didSet块(我不认为),所以默认初始化这个视图backgroundColor黑色或其他。

Swift的ibook提供了关于set,get,didSet和willSet的一些很好的提示,围绕着第250页。

让我知道如果你的错误仍然存​​在,(如果是这样,你应该可能会后,当你设置这个variables&类头和东西,可能是不够的信息,而且,你使用xcode6-beta4?)

你正在使用computed properties而不是使用stored property 。因为没有UIColorFromRGB提供了迅速,所以我写了我的

 class ViewSubClass:UIView{ var highlighted: Bool = true { didSet { if (highlighted) { self.backgroundColor = UIColorFromRGB(0x387038); } else { self.backgroundColor = UIColorFromRGB(0x5bb75b); } } } init(frame: CGRect) { super.init(frame: frame) } func UIColorFromRGB(rgbValue: UInt) -> UIColor { return UIColor( red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(1.0) ) } }