如何在SWIFT中访问UIColor的扩展?

我很新,迅速尝试创build一个UIColor类的扩展

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

之后,我访问该方法

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

我不知道我应该通过这个声明作为论据。

你已经定义了一个实例方法 ,这意味着你只能在一个UIColor实例上调用它:

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

编译器错误“缺less参数”发生,因为实例方法在Swift中是Curried函数 ,所以它可以等效地被调用为

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

(但这是一件奇怪的事情,我只是添加它来解释错误信息的来源。)


但是你真正想要的是一个types方法class func

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

这被称为

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

而不需要先创build一个UIColor实例。

使用Swift 3,相应地使用预定义的UIColors:

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

因此,如果你想要类似的东西,比如以下…

 var myColor: UIColor = .myCustomColor 

…然后,你可以这样定义扩展:

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

事实上,苹果将白色定义为:

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

使用:

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

要么

 self.view.backgroundColor = .myBlue 

你只需要改变你的陈述,

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

更详细的解释在这里 。

你定义了一个实例函数。 这意味着你需要一个UIColor的实例来防止使用getCustomBlueColor()方法。

它看起来像你想有一个类方法,而不是实例方法。 所以你必须像这样改变你的定义:

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

注意func之前的'class',所以这个方法现在可以作为一个类的方法来访问。

在一个结构中使用类方法的同一个故事:

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

如果你只想要一个具有一些颜色定义的类,我build议你使用一个类或扩展的结构:

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

可以使用计算属性:

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

然后称之为:

 UIColor().customBlueColor 

迅速:

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