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的计算值,而是所有你想要知道当突出显示改变,你应该使用willSet或didSet
为你的情况, 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) ) } }