attributed swift nsattributedstring swift4 nsattributedstringkey

attributed string swift



No se puede convertir el valor del tipo ''[String: AnyObject]?'' al tipo de argumento esperado ''[NSAttributedStringKey: Any]?'' (3)

Esta es una nueva característica de Swift 4. Todos los métodos de Cocoa que toman identificadores de cadena y / o claves de diccionario ahora tienen sus propios tipos para las claves. La razón de esto es agregar un poco de seguridad de tipo: en el antiguo régimen, era posible pasar accidentalmente una constante de String por error que estaba destinada a ser usada con otra API, pero ahora en Swift 4, esto resultará en Un error de compilación.

Cambie su firma de método a:

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

EDITAR: Actualizado para Swift 4.2! NSAttributedStringKey ha cambiado su nombre a NSAttributedString.Key .

¿Cómo convertir valores de tipo ''[String : AnyObject]?'' al tipo de argumento esperado ''[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() }


Este es el módulo de gráficos. Tuve el mismo problema.

Cambiar el argumento del método corrige el error en ese método, pero eleva el problema a todas las personas que llaman a ese método, que ahora tienen el mismo problema.

¿Existe una solución rápida que no implique cambiar toda la pila de llamadas?


Su argumento de atrribute es incorrecto en la función drawText .

Cambio

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

a

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