Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift Extension Not working

I've added an extension to UIColor for some colors that I use throughout my app. Here's an example:

extension UIColor {
    func appLightGrayColor() -> UIColor {
    return UIColor(red: 190.0/255.0, green: 190.0/255.0, blue: 190.0/255.0, alpha: 1.0)
    }

    func grayScaleColor(grayScale : CGFloat) -> UIColor {
    return UIColor(red: grayScale/255.0, green: grayScale/255.0, blue: grayScale/255.0, alpha: 1.0)
    }
}

However, when I try to call it, the only way that I've been able to compile without errors is this:

UINavigationBar.appearance().barTintColor = UIColor.appLightGrayColor(UIColor())()

Here's what I get with autocomplete:

enter image description here

What am I doing wrong?

like image 800
Cody Winton Avatar asked Jun 23 '14 22:06

Cody Winton


2 Answers

You have added instance method, but what you really want is class method

extension UIColor {
    class func appLightGrayColor() -> UIColor {
    return UIColor(red: 190.0/255.0, green: 190.0/255.0, blue: 190.0/255.0, alpha: 1.0)
    }

    class func grayScaleColor(grayScale : CGFloat) -> UIColor {
    return UIColor(red: grayScale/255.0, green: grayScale/255.0, blue: grayScale/255.0, alpha: 1.0)
    }
}
like image 57
Bryan Chen Avatar answered Oct 16 '22 12:10

Bryan Chen


While Bryan's answer is still correct, with the release of Swift 3, the preferred "Swifty" way of doing things has changed a bit.

With Swift 3, predefined UIColors are used accordingly:

var myColor: UIColor = .white // or .clear or whatever

Therefore, if you want something similar, such as the following...

var myColor: UIColor = .myCustomColor

...then, you would define the extension like so:

extension UIColor
    {
    public class var myCustomColor: UIColor
        {
        return UIColor(red: 248/255, green: 248/255, blue: 248/255, alpha: 1.0)
        }
    }

In fact, Apple defines white as:

public class var white: UIColor
like image 31
Gene Loparco Avatar answered Oct 16 '22 10:10

Gene Loparco