Comment convertir des valeurs de type '[String : AnyObject]?'
au type d'argument attendu '[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()
}
Il s'agit d'une nouvelle fonctionnalité de Swift 4. Toutes les méthodes Cocoa qui prennent des identificateurs de chaîne et/ou des clés de dictionnaire ont maintenant leurs propres types pour les clés. La raison en est d'ajouter un peu de sécurité de type: dans l'ancien régime, il était possible de passer accidentellement une constante String
par erreur qui devait être utilisée avec une autre API, mais maintenant dans Swift 4, cela entraînera une erreur de compilation.
Modifiez la signature de votre méthode en:
open class func drawText(context: CGContext, text: String, point: CGPoint,
align: NSTextAlignment, attributes: [NSAttributedString.Key : Any]?)
EDIT: Mis à jour pour Swift 4.2! NSAttributedStringKey
a été renommé NSAttributedString.Key
.
Votre argument atrribute
est incorrect dans la fonction drawText
.
Changement
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]?)