J'ai besoin d'un dictionnaire Swift pouvant stocker n'importe quel type d'objet. Certaines des valeurs seront CGColor
références. Je n'ai aucun problème à créer le dictionnaire et à stocker les références CGColor
. Le problème est d'essayer de les récupérer en toute sécurité.Problème lors de la récupération d'une CGColor à partir d'un dictionnaire Swift
let color = CGColor(gray: 0.5, alpha: 1)
var things = [String:Any]()
things["color"] = color
things["date"] = Date()
print(things)
Cela fonctionne et j'obtiens une sortie raisonnable. Plus tard, je souhaite obtenir la couleur (qui peut ou peut ne pas exister dans le dictionnaire Alors, naturellement, je les opérations suivantes:.
if let color = things["color"] as? CGColor {
print(color)
}
Mais cela se traduit par l'erreur:
error: conditional downcast to CoreFoundation type 'CGColor' will always succeed
En fin de compte Je suis venu avec:
if let val = things["color"] {
if val is CGColor {
let color = val as! CGColor
print(color)
}
}
Cela fonctionne sans aucun avertissement dans une aire de jeux, mais dans mon projet Xcode réelle, je reçois un avertissement sur la ligne if val is CGColor
:
'is' test always true because 'CGColor' is a Core Foundation type
Y a-t-il une bonne solution à ce problème? Je travaille avec des graphiques et des calques de base et le code doit fonctionner avec iOS et macOS, donc j'essaie d'éviter UIColor
et NSColor
.
J'ai trouvé Casting from AnyObject to CGColor? without errors or warnings qui est lié mais ne semble plus pertinent puisque je n'ai pas besoin des parenthèses pour éliminer l'avertissement plus j'essaye d'utiliser la liaison facultative qui n'est pas couverte par cette question.
Quelle est la version Swift? – iMuzahid
Compare [Comment puis-je taper check CGColor/CGPath?] (Http: // stackoverflow.com/q/38252330/2976878) - vous ne pouvez pas vérifier un type de base de base avec 'is' /' as? 'parce que c'est vraiment un pointeur opaque, vous pouvez cependant utiliser' CFGetTypeID'. – Hamish
@ Md.MuzahidulIslam Swift 3.1 (Xcode 8.3.2) – rmaddy