web-dev-qa-db-fra.com

Comment accéder à l'extension de UIColor dans SWIFT?

je suis très nouveau chez Swift et j'essaie de créer une extension de la classe UIColor en tant que 

extension UIColor{

    func getCustomBlueColor() -> UIColor{

    return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)

    }

Après cela, j'ai accédé à la méthode en tant que

btnShare.setTitleColor(UIColor.getCustomBlueColor(**UIColor**), forState: UIControlState.Normal)

Je ne sais pas ce que je devrais transmettre comme argument à cette déclaration.

18
user4790024

Vous avez défini une méthode instance, ce qui signifie que vous pouvez appelerit uniquement sur une instance UIColor:

let col = UIColor().getCustomBlueColor()
// or in your case:
btnShare.setTitleColor(UIColor().getCustomBlueColor(), forState: .Normal)

L'erreur du compilateur "argument manquant" se produit car Les méthodes d'instance sont des fonctions curries dans Swift ,

let col = UIColor.getCustomBlueColor(UIColor())()

(Mais ce serait une chose étrange à faire, et je ne l'ai ajoutée qu'à Expliquer d'où vient le message d'erreur.)


Mais ce que vous voulez vraiment, c'est une méthode type (class func)

extension UIColor{
    class func getCustomBlueColor() -> UIColor{
        return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
    }
}

qui s'appelle comme

let col = UIColor.getCustomBlueColor()
// or in your case:
btnShare.setTitleColor(UIColor.getCustomBlueColor(), forState: .Normal)

sans qu'il soit nécessaire de créer une instance UIColor en premier.

43
Martin R

Avec Swift 3, les couleurs UIC prédéfinies sont utilisées en conséquence:

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

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

var myColor: UIColor = .myCustomColor

... alors, vous définiriez l'extension comme suit:

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 le blanc comme suit:

public class var white: UIColor
23
Gene Loparco

Swift 3, rapide 4:

extension UIColor {
   static let myBlue = UIColor(red:0.043, green:0.576 ,blue:0.588, alpha:1.00) 
}

Utilisation:

btnShare.setTitleColor(.myBlue, for: .normal)

Ou

self.view.backgroundColor = .myBlue
16
Yurii Radchenko

Vous avez juste besoin de changer votre déclaration comme,

 btnShare.setTitleColor(UIColor().getCustomBlueColor(), forState:.Normal)

Une explication plus détaillée est ici .

2
itsji10dra

Vous avez défini une fonction d'instance. Cela signifie que vous avez besoin d'une instance de UIColor au cas où vous utiliseriez la méthode getCustomBlueColor()-.

Il semble que vous souhaitiez avoir une méthode de classe au lieu de la méthode d'instance. Donc, vous devez changer votre définition comme ceci:

extension UIColor{
    class func getCustomBlueColor() -> UIColor{
        return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
    }
}

Notez la 'classe' avant func, ainsi la méthode est maintenant accessible en tant que méthode de classe.

La même histoire utilisant des méthodes de classe dans une structure:

struct MyColors{
    static func getCustomBlueColor() -> UIColor{
        return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
    }
}
let color = MyColors.getCustomBlueColor()

Si vous voulez juste avoir une classe avec des définitions de couleurs, je vous recommande d'utiliser une structure sur une classe ou une extension:

struct MyColors{
    static var getCustomBlueColor = { return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00) }
}
let color = MyColors.getCustomBlueColor()
1
i89

Rapide:

extension UIColor {
    open class var yourOrange: UIColor {
        return UIColor.init(colorLiteralRed: 0.988, green: 0.337, blue: 0.063, alpha: 1)
    }
} 
0
Juan Boero

Pourrait utiliser une propriété calculée:

extension UIColor {
  var customBlueColor: UIColor {
    return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
  }
}

Et puis l'appeler:

UIColor().customBlueColor
0
Eric Hodgins