我正在尝试转换 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 和 getter 在 Swift 中消失了。至少有点不同。
我尝试像这样将 setter 添加到 highlightedColor
,
var highlightedColor = UIColor() {
set {
setNeedsDisplay()
}
}
但我在 set
行收到此错误 - Use of unresolved identifier 'set'
有人可以告诉我如何纠正这个错误吗?我想不通。
谢谢。
最佳答案
setter 和 getter 都放在变量声明中:
var highlightedColor: UIColor {
set {
//custom setter
}
get {
//custom getter
}
}
您还需要包含 get
。无论如何,如果你想调用 setNeedsDisplay()
,你最好使用像这样的“属性观察器”:
var highlightedColor: UIColor {
didSet {
setNeedsDisplay()
}
}
有关更多信息,请查看 Swift Properties
关于ios - Swift 中缺少属性 setter 和 getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25506094/