Swift - Drawing text with drawInRect:withAttributes:

swift

Solution

The problem is that `font` is optional because the convenience contructors now return optional values, so `font` needs to be unwrapped to be a value in your dictionary:

if let actualFont = font {
    let textFontAttributes = [
        NSFontAttributeName: actualFont,
        NSForegroundColorAttributeName: textColor,
        NSParagraphStyleAttributeName: textStyle
    ]

    text.drawInRect(NSOffsetRect(textRect, 0, 1), withAttributes: textFontAttributes)
}

Problem

I have strange problem with Xcode 6.1 GM. ``` let text: NSString = "A" let font = NSFont(name: "Helvetica Bold", size: 14.0) let textRect: NSRect = NSMakeRect(5, 3, 125, 18) let textStyle = NSMutableParagraphStyle.defaultParagraphStyle().mutableCopy() as NSMutableParagraphStyle textStyle.alignment = NSTextAlignment.LeftTextAlignment let textColor = NSColor(calibratedRed: 0.147, green: 0.222, blue: 0.162, alpha: 1.0) let textFontAttributes = [ NSFontAttributeName: font, NSForegroundColorAttributeName: textColor, NSParagraphStyleAttributeName: textStyle ] text.drawInRect(NSOffsetRect(textRect, 0, 1), withAttributes: textFontAttributes) ``` Error is in line let texFontAttributes... ``` Cannot convert the expression's type 'Dictionary' to type 'DictionaryLiteralConvertible' ``` This code is worked perfectly until Xcode 6.1 GM. When I'm tried to declare textFontAttributes as NSDictionary error message is changed to: ``` Cannot convert the expression's type 'NSDictionary' to type 'NSString!' ``` I have no idea how to solve this problem :(

Original source