Isu*_*uru 3 properties objective-c getter-setter ios swift
我正在尝试将此 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
}
}
Run Code Online (Sandbox Code Playgroud)
在原始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;
}
Run Code Online (Sandbox Code Playgroud)
我注意到物业制定者和吸气者已经消失了我的斯威夫特.至少有点不同.
我尝试添加这样的setter highlightedColor,
var highlightedColor = UIColor() {
set {
setNeedsDisplay()
}
}
Run Code Online (Sandbox Code Playgroud)
但我在这一set行得到了这个错误- 使用未解析的标识符'set'
有人可以告诉我如何纠正这个错误?我无法弄清楚.
谢谢.
setter和getter都放在变量声明中:
var highlightedColor: UIColor {
set {
//custom setter
}
get {
//custom getter
}
}
Run Code Online (Sandbox Code Playgroud)
你还需要包括get.无论如何,如果你想打电话给setNeedsDisplay()你,最好使用"属性观察者",如下所示:
var highlightedColor: UIColor {
didSet {
setNeedsDisplay()
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看Swift Properties