Skip to content

Instantly share code, notes, and snippets.

@zane-carter
Created January 24, 2021 03:29
Show Gist options
  • Save zane-carter/fc2bf8f5f5ac45196b4c9b01d54aca80 to your computer and use it in GitHub Desktop.
Save zane-carter/fc2bf8f5f5ac45196b4c9b01d54aca80 to your computer and use it in GitHub Desktop.
import Foundation
import SwiftUI
import UIKit
extension Color: RawRepresentable {
public init?(rawValue: String) {
guard let data = Data(base64Encoded: rawValue) else{
self = .black
return
}
do{
let color = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? UIColor ?? .black
self = Color(color)
}catch{
self = .black
}
}
public var rawValue: String {
do{
let data = try NSKeyedArchiver.archivedData(withRootObject: UIColor(self), requiringSecureCoding: false) as Data
return data.base64EncodedString()
}catch{
return ""
}
}
}
@dancarvajc
Copy link

Thank you! here a little simplified and updated code:

extension Color: RawRepresentable {
    public init?(rawValue: String) {
        guard let data = Data(base64Encoded: rawValue),
              let color = try? NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: data) else {
            return nil
        }
        self = Color(color)
    }

    public var rawValue: String {
        let data = try? NSKeyedArchiver.archivedData(
          withRootObject: UIColor(self), requiringSecureCoding: false)
        return data?.base64EncodedString() ?? ""
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment