Swift中缺少属性设置器和getter

时间:2014-08-26 12:41:27

标签: ios objective-c properties swift getter-setter

我正在尝试将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'

有人可以告诉我如何更正此错误?我无法理解。

谢谢。

1 个答案:

答案 0 :(得分:6)

setter和getter都放在变量声明中:

var highlightedColor: UIColor {
    set {
        //custom setter
    }
    get {
        //custom getter
    }
}

您还需要包含get。无论如何,如果你想打电话给setNeedsDisplay(),那么你最好使用“属性观察者”,如下所示:

var highlightedColor: UIColor {
    didSet {
        setNeedsDisplay()
    }
}

有关详细信息,请查看Swift Properties