How convert NSColor to Color & vice versa on SwiftUI

342 Views Asked by At

I'm developing a macOS app with SwiftUI.

I have an extension to save the NSColors on Userdefaults & get it later.

I want to use this extension but cannot cast the SwiftUI Color to NSColor and vice versa.

The codes I tried so far was these:

let swiftUIColor = Color.red
let nsColor = NSColor(swiftUIColor)

or

let nsColor = NSColor.red
let swiftUIColor = Color(nsColor)

None of the above codes did work out.

Here is the extension to save & read NSColor on Userdefaults:

extension UserDefaults {

func color(forKey key: String) -> NSColor? {
    guard let colorData = data(forKey: key) else { return nil }
    do {
        return try NSKeyedUnarchiver.unarchivedObject(ofClass: NSColor.self, from: colorData)
    } catch let error {
        print("color error \(error.localizedDescription)")
        return nil
    }
}

func set(_ value: NSColor?, forKey key: String) {
    guard let color = value else { return }
    do {
        let data = try NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: false)
        set(data, forKey: key)
    } catch let error {
        print("error color key data not saved \(error.localizedDescription)")
    }
}
}
0

There are 0 best solutions below