无法转换'[String:AnyObject]类型的值?'预期的参数类型'[NSAttributedStringKey:Any]?'

时间:2017-08-15 14:42:50

标签: swift nsattributedstring swift4 nsattributedstringkey

如何将'[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()
}

3 个答案:

答案 0 :(得分:28)

这是Swift 4的一个新功能。所有采用字符串标识符和/或字典键的Cocoa方法现在都有自己的键类型。这样做的原因是在旧方案中添加了一些类型的安全性,可能会意外地错误地传递String常量,这意味着要与其他API一起使用,但现在在Swift 4中,这将导致编译错误。

将您的方法签名更改为:

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

编辑:已针对Swift 4.2进行了更新! NSAttributedStringKey已重命名为NSAttributedString.Key

答案 1 :(得分:5)

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]?)

答案 2 :(得分:-1)

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

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

是否存在不涉及更改整个调用堆栈的快速修复?