【发布时间】: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