2017-08-15 10 views
12

Comment faire pour convertir les valeurs de type '[String : AnyObject]?' en type d'argument attendu '[NSAttributedStringKey : Any]?'? pour les clésImpossible de convertir la valeur 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() 
} 

Répondre

19

Ceci est une nouvelle fonctionnalité de Swift 4. Toutes les Méthodes de cacao qui prennent les identificateurs de chaîne et/ou les clés de dictionnaire ont maintenant leurs propres types. La raison de ceci 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 se traduira par une erreur de compilation.

Changer votre signature méthode:

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

+0

Merci pour votre aide :) –

4

Votre argument de 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]?) 
-1

C'est le module Graphiques. J'ai rencontré le même problème.

La modification de l'argument de méthode corrige l'erreur dans cette méthode, mais envoie le problème à tous les appelants de cette méthode, qui ont maintenant le même problème.

Existe-t-il une solution rapide qui n'implique pas de modifier l'ensemble de la pile d'appels?

+0

Les réponses ne sont pas censées être utilisées pour poser des questions. Vous devriez envisager de faire un commentaire ou de poser une nouvelle question et vous référer à celui-ci à partir de là. –