web-dev-qa-db-fra.com

Erreur NSAttributedStringKey avec Swift 4

Après la mise à jour vers Swift 4, une erreur est générée sur ce code 

    attributes["NSFont"] = font
    attributes["NSColor"] = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1)

Impossible d'indiquer une valeur de type '[NSAttributedStringKey: Any]' avec un index de type 'String'

J'ai pu réparer la première ligne en remplaçant ["NSFont"] par NSAttributedStringKey.font mais je ne sais pas comment régler la seconde.

5
j.doe

Dans Swift 4 - la représentation de NSAttributedString est complètement modifiée.

Remplacez votre dictionnaire d'attributs - type attributes, de [String : Any] à [NSAttributedStringKey : Any] ou [NSAttributedString.Key : Any], si vous ne l'avez pas déjà fait.

Essayez ceci dans 

Swift 4.2+:

attributes[NSAttributedString.Key.font] = font
attributes[NSAttributedString.Key.foregroundColor] = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1)

Swift 4.0 & 4.1:

attributes[NSAttributedStringKey.font] = font
attributes[NSAttributedStringKey.foregroundColor] = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1)

Voici la note du document Apple: NSAttributedString.Key

11
Krunal

Utilisez NSAttributedStringKey.foregroundColor pour le second, les clés ne sont plus des chaînes, mais des constantes enum.

attributes[NSAttributedStringKey.font] = font
attributes[NSAttributedStringKey.foregroundColor] = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1)

Vous pouvez trouver toutes les clés dans la documentation officielle de NSAttributedStringKey

2
Milan Nosáľ

Pour Swift 3.3, NSForegroundColorAttributeName, NSFontAttributeName like

NSAttributedString(string: "text", attributes: [NSForegroundColorAttributeName : UIColor.white])

Pour Swift 4.0+

NSAttributedString(string: "text", attributes: [NSAttributedStringKey.foregroundColor : UIColor.white])
0
Bhanu