当我试图将我的应用程序升级到Swift 2时,出现了两个错误。
这两个错误是:
使用未解析的标识符“kCGPathStroke”
以及:
无法将“NSMutableDictionary”类型的值转换为预期值
参数类型“[String:AnyObject]?”
这两个问题在下面的代码中都有注释。我检查了文档,看起来好像kCGPathStroke仍然存在,所以我真的很困惑为什么它被打破了。我做错什么了?

import UIKit
import CoreGraphics
class MIBadgeLabel: UILabel {
    override func drawRect(rect: CGRect)
    {
        // Drawing code
        let ctx: CGContextRef = UIGraphicsGetCurrentContext()!
        let borderPath: UIBezierPath = UIBezierPath(roundedRect: rect, byRoundingCorners:UIRectCorner.AllCorners, cornerRadii: CGSizeMake(10.0, 10.0))

        CGContextSetFillColorWithColor(ctx, UIColor.whiteColor().CGColor)
        CGContextSaveGState(ctx)
        CGContextAddPath(ctx, borderPath.CGPath)
        CGContextSetLineWidth(ctx, 4.0)
        CGContextSetStrokeColorWithColor(ctx, UIColor.clearColor().CGColor)
        CGContextDrawPath(ctx, kCGPathStroke) //Swift 2 error
        CGContextRestoreGState(ctx)

        CGContextSaveGState(ctx)
//      CGContextSetFillColorWithColor(ctx, UIColor.whiteColor().CGColor)
        var textFrame: CGRect  = rect
        let labelString: NSString = self.text! as NSString
        let textSize: CGSize  = labelString.sizeWithAttributes([NSFontAttributeName : UIFont.systemFontOfSize(13.0)])
        textFrame.size.height = textSize.height

        textFrame.origin.y = rect.origin.y + ceil((rect.size.height - textFrame.size.height) / 2.0)

        let paragraphStyle: NSMutableParagraphStyle = NSMutableParagraphStyle();
        paragraphStyle.alignment = .Center

        var attributes: NSMutableDictionary = [NSFontAttributeName: UIFont.systemFontOfSize(13.0), NSForegroundColorAttributeName : UIColor.whiteColor(), NSParagraphStyleAttributeName:paragraphStyle]

        labelString.drawInRect(textFrame, withAttributes: attributes)  // Swift 2 error
    }
}

最佳答案

第一个错误:

CGContextDrawPath(ctx, kCGPathStroke)

这样地:
CGContextDrawPath(ctx, .Stroke)

第二个错误:
var attributes: NSMutableDictionary = [
    NSFontAttributeName: UIFont.systemFontOfSize(13.0),
    NSForegroundColorAttributeName : UIColor.whiteColor(),
    NSParagraphStyleAttributeName:paragraphStyle
]

这样地:
let attributes = [
    NSFontAttributeName: UIFont.systemFontOfSize(13.0),
    NSForegroundColorAttributeName : UIColor.whiteColor(),
    NSParagraphStyleAttributeName:paragraphStyle
]

关于ios - 如何使kCGPathStroke在Swift 2中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32871234/

10-12 01:46