2014-06-23 3 views
6

J'ai ajouté une extension à UIColor pour certaines couleurs que j'utilise dans mon application. Voici un exemple:Swift Extension Ne fonctionne pas

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

Cependant, lorsque je tente de l'appeler, la seule façon que je suis en mesure de compiler sans erreurs est la suivante:

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

Voici ce que je reçois avec autocomplete:

enter image description here

Qu'est-ce que je fais mal?

Répondre

2

Alors que la réponse de Bryan est toujours correcte, avec la sortie de Swift 3, la préférée façon « Swifty » de faire les choses a changé bit.

Avec Swift 3, UIColors prédéfinis sont utilisés en conséquence:

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

Par conséquent, si vous voulez quelque chose de similaire, comme suit ...

var myColor: UIColor = .myCustomColor 

... alors, vous auriez définir l'extension comme ceci:

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

En fait, Apple définit blanc comme:

public class var white: UIColor 
+0

Parler de la manière «Swifty» de faire les choses ... Les accolades d'ouverture ne devraient-elles pas être sur la même ligne que la déclaration? :) –

+0

Ne me lancez pas dessus! Cela ne deviendra qu'une guerre religieuse. :-) –

+0

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

18

Vous avez ajouté méthode d'instance, mais ce que vous voulez vraiment est 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, je suggère aussi que 'appLightGrayColor() -> UIColor {return UIColor.grayScaleColor (190,0)}' – Abizern

+0

Oh, wow. Duh. Merci!! –

Questions connexes