Swift中缺少属性设置器和getter

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'

有人可以告诉我如何纠正这个错误?我无法弄清楚.

谢谢.

Zal*_*ykr 6

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