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