Swift Extension不工作

Cod*_*ton 7 ios objective-c-category swift xcode6

我已经为UIColor添加了一些扩展,用于我在整个应用中使用的一些颜色.这是一个例子:

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试调用它时,我能够无错误地编译的唯一方法是:

UINavigationBar.appearance().barTintColor = UIColor.appLightGrayColor(UIColor())()
Run Code Online (Sandbox Code Playgroud)

这是我通过自动完成得到的:

在此输入图像描述

我究竟做错了什么?

Bry*_*hen 18

你已经添加了实例方法,但你真正想要的是类方法

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1,同样,我建议`appLightGrayColor() - > UIColor {return UIColor.grayScaleColor(190.0)}` (3认同)

Gen*_*rco 2

虽然 Bryan 的答案仍然是正确的,但随着 Swift 3 的发布,首选的“Swifty”做事方式发生了一些变化。

在 Swift 3 中,相应地使用预定义的 UIColors:

var myColor: UIColor = .white // or .clear or whatever
Run Code Online (Sandbox Code Playgroud)

因此,如果您想要类似的东西,例如以下......

var myColor: UIColor = .myCustomColor
Run Code Online (Sandbox Code Playgroud)

...然后,您可以像这样定义扩展:

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

事实上,苹果将白色定义为:

public class var white: UIColor
Run Code Online (Sandbox Code Playgroud)