ios - Swift 中缺少属性 setter 和 getter

标签 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 和 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/

相关文章:

ios - xcode中的调试符号是什么

objective-c - 浏览文本字段

objective-c - 没有 Interface Builder 的 Cocoa,初始化应用程序 Controller 的实例?

objective-c - 在 Objective-C 中获取对象属性列表

java - 限制哪些值可以在 javafx 属性中结算?

ios - 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序?有什么线索吗?

ios - 在同一类的多个 UIView 上设置独占触摸

ios - 在 UIDocument 应用程序中添加图像缩略图

iphone - UIButton 标题不出现或被剪切 - 仅最底部的标签

iphone - @dynamic 属性及其用法?