我正在尝试将this Objective-C类转换为Swift。
以下是我到目前为止所做的事情。
import UIKit
public class CustomColoredAccessory: UIControl {
var accessoryColor = UIColor()
var highlightedColor = UIColor()
required public init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.clearColor()
}
override public func drawRect(rect: CGRect) {
let x: CGFloat = CGRectGetMaxX(bounds) - 3
let y: CGFloat = CGRectGetMaxY(bounds)
let R: CGFloat = 4.5
let ctxt = UIGraphicsGetCurrentContext()
CGContextMoveToPoint(ctxt, x - R, y - R)
CGContextAddLineToPoint(ctxt, x, y)
CGContextAddLineToPoint(ctxt, x - R, y + R)
CGContextSetLineCap(ctxt, kCGLineCapSquare)
CGContextSetLineJoin(ctxt, kCGLineJoinMiter)
CGContextSetLineWidth(ctxt, 3)
if highlighted == true {
highlightedColor.setStroke()
} else {
accessoryColor.setStroke()
}
CGContextStrokePath(ctxt)
}
public class func accessoryWithColor(color: UIColor) -> CustomColoredAccessory {
var ret = CustomColoredAccessory(frame: CGRectMake(0, 0, 11, 15))
ret.accessoryColor = color
return ret
}
}
在原始Objective-C代码中,这两个属性有一个setter和两个getter。
- (void)setHighlighted:(BOOL)highlighted {
[super setHighlighted:highlighted];
[self setNeedsDisplay];
}
- (UIColor *)accessoryColor {
if (!_accessoryColor) {
return [UIColor blackColor];
}
return _accessoryColor;
}
- (UIColor *)highlightedColor {
if (!_highlightedColor) {
return [UIColor whiteColor];
}
return _highlightedColor;
}
我注意到属性设定者和吸气者已经消失了。至少有点不同。
我尝试将setter添加到highlightedColor
这样,
var highlightedColor = UIColor() {
set {
setNeedsDisplay()
}
}
但我在set
行显示此错误 - 使用未解析的标识符'set'
有人可以告诉我如何更正此错误?我无法理解。
谢谢。
答案 0 :(得分:6)
setter和getter都放在变量声明中:
var highlightedColor: UIColor {
set {
//custom setter
}
get {
//custom getter
}
}
您还需要包含get
。无论如何,如果你想打电话给setNeedsDisplay()
,那么你最好使用“属性观察者”,如下所示:
var highlightedColor: UIColor {
didSet {
setNeedsDisplay()
}
}
有关详细信息,请查看Swift Properties