This is a bit odd limitation that standard colours like red, green, etc are not available via Color(systemName:)
. Here's a possible workaround:
import SwiftUI
#if canImport(UIKit)
import UIKit
extension Color {
init?(systemName: String) {
let sel = Selector(systemName)
guard UIColor.self.responds(to: sel),
let result = UIColor.self.perform(sel) else {
print("no such system, color: \(systemName)")
return nil
}
let object = result as Unmanaged<AnyObject>
let color = object.takeUnretainedValue() as! UIColor
self.init(color)
}
}
#endif
#if canImport(Cocoa)
import Cocoa
extension Color {
init?(systemName: String) {
let sel = Selector(systemName)
guard NSColor.self.responds(to: sel),
let result = NSColor.self.perform(sel) else {
print("no such system, color: \(systemName)")
return nil
}
let object = result as Unmanaged<AnyObject>
let color = object.takeUnretainedValue() as! NSColor
self.init(color)
}
}
#endif
Should work for both UIKit and Cocoa clients utilising Obj-c's performSelector feature. Minimally tested.
PS. forgot to mention: systemName should be in the form: "systemRedColor"
, "systemBlueColor"
and so on.