Swift 4 Ne peut pas convertir une valeur de type '[Chaîne : AnyObject]?' à attendre argument de type '[NSAttributedStringKey : Tout]?'
J'ai juste mis à jour pour Xcode 9 et converti mon app de swift 3 à swift 4.
J'ai graphiques qui utilisent des chaînes d'étiqueter les axes et les autres variables.
J'ai donc un moneyAxisString = "Argent".
Auparavant, j'étais capable de dessiner à l'aide de ce code:
moneyAxisString.draw(in: CGRect(x: CGFloat(coordinateXOriginLT + axisLength/3), y: CGFloat(coordinateYOriginRT + axisLength + 5 * unitDim), width: CGFloat(300 * unitDim), height: CGFloat(100 * unitDim)), withAttributes: attributes as? [String : AnyObject])
Où les attributs d'un dictionnaire définit comme suit
attributes = [
NSAttributedStringKey.foregroundColor: fieldColor,
NSAttributedStringKey.font: fieldFont!,
NSAttributedStringKey.paragraphStyle: style
]
Maintenant, mon application ne compile pas et je reçois le message:
Ne peut pas convertir une valeur de type '[Chaîne : AnyObject]?' à attendre argument de type '[NSAttributedStringKey : Tout]?'
Vous devez vous connecter pour publier un commentaire.
C'est une incompatibilité de type:
[String : AnyObject]
est clairement pas[NSAttributedStringKey : Any]
⌥-cliquez sur sur
NSAttributedStringKey
voir la déclaration.La solution est de déclarer
attributes
commepour retirer le bas de fonte
et d'écrire simplement
var attributes = [NSAttributedStringKey : Any]()
plutôt queNSDictionary
, alors vous pouvez même supprimer l'annotation. N'utilisez pas deNSDictionary
rapide de toute façon.Essayez ceci:
ou:
NSAttributedStringKey
a été changé pour un struct dans Swift 4. Cependant, d'autres objets que utilisationNSAttributedStringKey
n'a apparemment pas mis à jour en même temps.Le plus simple correctif, sans avoir à modifier votre code, est à ajouter
.rawValue
à tous votre occurrences deNSAttributedStringKey
setters - tournez la clé de noms dansString
s:Notez que vous n'aurez pas besoin d'
!
à laas
maintenant, soit.Alternativement, vous pouvez sauter le
as
exprimées à la fin en déclarant que la matrice soit[String : Any]
d'avance:Bien sûr, vous avez encore besoin d'ajouter le
.rawValue
pour chaqueNSAttributedStringKey
élément que vous définissez.Swift 4.2
Construit sur l'exemple de user_Dennis