Swifty UIColors

Written by HaydenHolligan | Published 2017/07/25
Tech Story Tags: ios | swift | swift-3

TLDRvia the TL;DR App

Custom Swift UIColors

Back in Swift 2, or even earlier, UIColors were class functions, called via UIColor.blackColor() , UIColor.redColor() , etc.

Naturally, creating a custom colour would look something like

extension UIColor {

class func facebookBlue() -> UIColor {

return UIColor(red: 59/255, green: 89/255, blue: 152/255, alpha: 1)

}

and would be called via UIColor.facebookBlue() .

In Swift 3, default UIColors were modified to be class properties, called via UIColor.blue (or, if the type is already determined, simply .blue )

I’ve noticed a lot of people (myself included) are still creating custom UIColors the pre-Swift 3 way. But I ask, why would you, when you can write them like so:

extension UIColor {

class var facebookBlue: UIColor {

return UIColor(red: 59/255, green: 89/255, blue: 152/255, alpha: 1)

}

called via UIColor.facebookBlue or .facebookBlue where appropriate.

So much better right?

For the more curious: the keyword class means that the method/property is called upon the class, not an object of the class. This is very similar to static , which may sound more familiar if you’ve used C++ or Java before.

static is in fact also available in Swift and can be used in place of class , so I was interested to determine the differences. If you use class , the method/property can be overridden in a subclass, while static cannot.

This is a pretty minute detail in this case of creating custom UIColors , but a little more knowledge never hurt!

For people who are still reading: While we’re inside a UIColor extension… Here’s a convenience init I like to use to simplify custom UIColor initialization

convenience init(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat {return UIColor(red: r/255, green: g/255, blue: b/255, alpha: a)}

//called via

class var facebookBlue: UIColor {return UIColor(r: 59, g: 89, b: 152, a: 1)}

Hoped you enjoyed!


Published by HackerNoon on 2017/07/25