一尘不染

无法转换类型[[String:AnyObject]?到预期的参数类型'[NSAttributedStringKey:任何]?”

swift

如何将类型的值转换'[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()
}

阅读 321

收藏
2020-07-07

共1个答案

一尘不染

这是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

2020-07-07