Ich brauche ein Swift-Wörterbuch, das beliebige Objekte speichern kann. Einige der Werte sind CGColor
Referenzen. Ich habe kein Problem, das Wörterbuch zu erstellen und die CGColor
Referenzen zu speichern. Das Problem ist, sie sicher zurück zu bekommen.Problem beim Abrufen eines CGColor aus einem Swift-Wörterbuch
let color = CGColor(gray: 0.5, alpha: 1)
var things = [String:Any]()
things["color"] = color
things["date"] = Date()
print(things)
Das funktioniert und ich bekomme vernünftige Ergebnisse. Später mag ich die Farbe erhalten (die so natürlich kann oder auch nicht im Wörterbuch vorhanden Ich versuche folgend:.
if let color = things["color"] as? CGColor {
print(color)
}
Aber dies führt zu dem Fehler:
error: conditional downcast to CoreFoundation type 'CGColor' will always succeed
Am Ende ich kam mit:
if let val = things["color"] {
if val is CGColor {
let color = val as! CGColor
print(color)
}
}
Dies ohne Warnung auf einem Spielplatz funktioniert, aber in meinem eigentlichen Xcode Projekt erhalte ich eine Warnung auf der if val is CGColor
Linie:
'is' test always true because 'CGColor' is a Core Foundation type
Gibt es eine gute Lösung für dieses Problem?
Ich arbeite mit Core-Grafik und Ebenen und der Code muss mit iOS und MacOS arbeiten, also versuche ich UIColor
und NSColor
zu vermeiden.
Ich habe Casting from AnyObject to CGColor? without errors or warnings gefunden, die verwandt ist, aber scheint nicht mehr relevant, da ich die Klammern nicht brauche, um die Warnung zu beseitigen, plus ich versuche, optionale Bindung zu verwenden, die von dieser Frage nicht abgedeckt wird.
Was ist die Swift-Version? – iMuzahid
Vergleichen [Wie kann ich CGColor/CGPath checken?] (Http: // stackoverflow.com/q/38252330/2976878) - Sie können einen Core Foundation-Typ nicht mit 'is' /' as? 'eintippen, da es sich eigentlich nur um einen undurchsichtigen Zeiger handelt, Sie können jedoch' CFGetTypeID' verwenden. – Hamish
@ Md.MuzahidulIslam Swift 3.1 (Xcode 8.3.2) – rmaddy