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.
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.
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
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
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ù 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()
Rapide:
extension UIColor {
open class var yourOrange: UIColor {
return UIColor.init(colorLiteralRed: 0.988, green: 0.337, blue: 0.063, alpha: 1)
}
}
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