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

je suis très nouveau à rapidement et en essayant de créer une extension de la class UIColor comme

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

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

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

Vous avez défini une méthode d'instance , ce qui signifie que vous ne pouvez l'appeler que sur une instance UIColor :

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

L'erreur de compilation "argument manquant" se produit parce que les methods d'instance sont des fonctions cariées dans Swift , de sorte qu'il pourrait être appelé de manière équivalente

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

(Mais ce serait une chose étrange à faire, et je l'ai ajouté seulement pour expliquer d'où vient le message d'erreur.)


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

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

qui est appelé comme

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

sans avoir besoin de créer une instance UIColor premier.

Avec Swift 3, les 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 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:

 public class var white: UIColor 

Swift 3:

 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 

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

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

Une explication plus détaillée est ici .

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

Il semble que vous souhaitiez avoir une méthode de class, 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 'class' avant func, donc la méthode est maintenant accessible en tant que méthode de class.

La même histoire en utilisant des methods de class 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 class avec quelques définitions de colors, je vous recommand d'utiliser une structure sur une class 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() 

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 

Rapide:

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