How to convert values of type '[String : AnyObject]?'
to expected argument type '[NSAttributedStringKey : Any]?'
?
open class func drawText(context: CGContext, text: String, point: CGPoint,
align: NSTextAlignment, attributes: [String : AnyObject]?)
{
var point = point
if align == .center
{
point.x -= text.size(withAttributes: attributes).width / 2.0
}
else if align == .right
{
point.x -= text.size(withAttributes: attributes).width
}
NSUIGraphicsPushContext(context)
(text as NSString).draw(at: point, withAttributes: attributes)
NSUIGraphicsPopContext()
}
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?
来源:https://stackoverflow.com/questions/45695286/cannot-convert-value-of-type-string-anyobject-to-expected-argument-type