如何在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) } }