2014-06-23 39 views
6

我已經爲UIColor添加了一個擴展,用於在應用程序中使用的一些顏色。這裏有一個例子:Swift Extension不能正常工作

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) 
    } 
} 

然而,當我嘗試調用它,我已經能夠沒有錯誤編譯唯一的辦法是這樣的:

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

這裏是我與自動完成:

enter image description here

我在做什麼錯?

回答

2

雖然布賴恩的回答仍然是正確的,隨着斯威夫特3的發佈,辦事首選「SWIFTY」的方式已經改變了位。

與SWIFT 3,預定義UIColors相應地使用:

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

因此,如果你想類似的東西,比如下面...

var myColor: UIColor = .myCustomColor 

...那麼,你會定義擴展名如下:

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

其實,蘋果定義白色爲:

public class var white: UIColor 
+0

談論「Swifty」做事的方式......不應該打開大括號與陳述相同? :) –

+0

不要讓我開始!它只會成爲一場宗教戰爭。 :-) –

+0

https://en.wikipedia.org/wiki/Indent_style#Whitesmiths_style –

18

您已經添加了實例方法,但你真正想要的是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) 
    } 
} 
+3

+1,另外,我建議'appLightGrayColor() - > UIColor {return UIColor.grayScaleColor(190.0)}' – Abizern

+0

哦,哇。咄。謝謝!! –