2014-06-23 12 views
6

Ho aggiunto un'estensione a UIColor per alcuni colori che uso nella mia app. Ecco un esempio:Estensione rapida non funzionante

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

Tuttavia, quando provo a chiamarlo, l'unico modo in cui sono stato in grado di compilare senza errori è questo:

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

Ecco quello che ottengo con completamento automatico:

enter image description here

che cosa sto facendo di sbagliato?

risposta

2

Mentre la risposta di Bryan è ancora corretta, con il rilascio di Swift 3, il modo preferito "Swifty" di fare le cose è cambiata po.

Con Swift 3, UIColors predefiniti vengono utilizzati di conseguenza:

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

Pertanto, se si vuole qualcosa di simile, come ad esempio il seguente ...

var myColor: UIColor = .myCustomColor 

... poi, si sarebbero definire l'estensione in questo modo:

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

In realtà, Apple definisce bianco come:

public class var white: UIColor 
+0

Parlando del modo "Swifty" di fare le cose ... Non dovresti aprire le parentesi sulla stessa riga dell'affermazione? :) –

+0

Non farmi iniziare su quello! Diventerà solo una guerra religiosa. :-) –

+0

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

18

Hai aggiunto metodo di istanza, ma ciò che si vuole veramente è 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, anche, propongo 'appLightGrayColor() -> UIColor {return UIColor.grayScaleColor (190.0)}' – Abizern

+0

Oh, wow. Duh. Grazie!! –