【问题标题】:Property setters and getters missing in SwiftSwift 中缺少属性设置器和获取器
【发布时间】:2014-08-26 12:41:27
【问题描述】:

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

我注意到属性设置器和获取器在 Swift 中消失了。至少有点不同。

我尝试像这样将 setter 添加到 highlightedColor

var highlightedColor = UIColor() {
    set {
        setNeedsDisplay()
    }
}

但我在set 行收到此错误 - Use of unresolved identifier 'set'

谁能告诉我如何纠正这个错误?我想不通。

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    您还需要包含get。无论如何,如果你想打电话给setNeedsDisplay(),你最好使用这样的“财产观察员”:

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

    更多信息请查看Swift Properties

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      相关资源
      最近更新 更多