Cannot convert value of type '[String : AnyObject]?' to expected argument type '[NSAttributedStringKey : Any]?'

这一生的挚爱 提交于 2019-11-28 10:46:05

This is a new feature of Swift 4. All the Cocoa methods that take string identifiers and/or dictionary keys now have their own types for the keys. The reason for this is to add a bit of type safety—in the old regime, it was possible to accidentally pass a String constant by mistake that was meant to be used with some other API, but now in Swift 4, this will result in a compilation error.

Change your method signature to:

open class func drawText(context: CGContext, text: String, point: CGPoint,
    align: NSTextAlignment, attributes: [NSAttributedString.Key : Any]?)

EDIT: Updated for Swift 4.2! NSAttributedStringKey has been renamed to NSAttributedString.Key.

Your atrribute argument is incorrect in the drawText function.

Change

open class func drawText(context: CGContext, text: String, point: CGPoint, align: NSTextAlignment, attributes: [String : AnyObject]?)

to

open class func drawText(context: CGContext, text: String, point: CGPoint, align: NSTextAlignment, attributes: [NSAttributedStringKey : Any]?)

This is the Charts module. I ran into the same problem.

Changing the method argument fixes the error in that method, but pushes the problem up to all the callers of that method, which now have the same issue.

Is there a quick fix that doesn't involve changing the whole call stack?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!