Skip to content

vsanthanam/MaterialColors-Swift

Repository files navigation

MaterialColors

MaterialColors is a swift package for quickly implementing colors from Material Design in your applications. It supports UIKit, AppKit, and SwiftUI, as well as platform light and dark user interface styles

Setup

MaterialColors uses the The Swift Package Manager for distrubition. For now, this is the only supported method of installation, but others will be added soon.

Add MaterialColors to your Package.swift file like so:

dependencies: [
    .package(url: "https://github.com/vsanthanam/MaterialColors-Swift.git", .upToNextMajor(from: "0.0.0"))
]

Usage

UIKit

import MaterialColors
import UIKit

let view = UIView()
view.backgroundColor = .material(.red400)
import MaterialColors
import UIKit

let dynamicView = UIView()
view.backgroundColor = .material(light: .grey50, dark: .grey400)

AppKit

import AppKit
import MaterialColors

let view = NSView()
view.backgroundColor = .material(.green50)

CoreGraphics

import CoreGraphics
import MaterialColors
import UIKit

let view = UIView()
view.layer.background = .material(.purple300)
import AppKit
import CoreGraphics
import MaterialColors

let view = NSView()
view.layer.background = .material(.orange200)

SwiftUI

import MaterialColors
import SwiftUI

struct MyView: View {

    var body: some View {
        Rectangle()
            .foregroundColor(.material(.deepPurple400))
    }

}

Strings

You can also create material colors from strings and string literals. This can be useful if you are parsing some value from an http response:

import MaterialColors
import UIKit

let uicolor: UIColor = .material("red400")

let string = "red400"
let color = MaterialColor(string)

let nscolor: NSColor = .material(color)

Converting Backwards

You can also determine whether a given color is one of the standard material design colors, and if so, which one it is:

import MaterialColors
import UIKit
import XCTest

let materialColor: UIColor = .material(.red400)
let nonMaterialColor = UIColor.blue

XCTAssertNil(nonMaterialColor.asMaterialColor)
XCTAssertEqual(materialColor.asMaterialColor, .red400)