2017-08-15 70 views
12

如何将'[String : AnyObject]?'类型的值转换为预期的参数类型'[NSAttributedStringKey : Any]?'无法转换类型'[String:AnyObject]的值?'到期望的参数类型'[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() 
} 

回答

19

这是斯威夫特4.所有的Cocoa方法是采取字符串标识符和/或字典键现在有自己的类型按键的一项新功能。其原因是增加了一些类型安全性 - 在旧政权中,有可能意外地传递了一个常量,意在与其他API一起使用,但现在在Swift 4中,这会导致编译错误。

你的方法的签名更改为:

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

+0

感谢您的帮助:) –

4

atrribute取值drawText函数不正确。

变化

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

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

这是图表模块。我遇到了同样的问题。

更改方法参数可以修复该方法中的错误,但会将问题推送给该方法的所有调用者,而这些方法现在都有相同的问题。

是否有一个快速修复不涉及更改整个调用堆栈?

+0

答案不应该用于提问。你应该考虑发表评论或者提出一个新的问题,并从那里引用这个问题。 –

相关问题