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

时间:2015-04-15 10:55:11

标签: ios swift extension-methods uicolor

我对swift很新,并试图创建一个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)

我不知道我应该通过什么作为这个陈述的论据。

9 个答案:

答案 0 :(得分:46)

您已定义实例方法,这意味着您可以调用 它仅在UIColor实例上:

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

发生编译器错误“缺少参数”,因为 Instance Methods are Curried Functions in Swift, 所以它可以等同地称为

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

(但这样做会很奇怪,而且我只是添加了它 解释错误消息的来源。)


但你真正想要的是类型方法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)

无需先创建UIColor实例。

答案 1 :(得分:23)

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

事实上,Apple将white定义为:

public class var white: UIColor

答案 2 :(得分:16)

斯威夫特3,斯威夫特4:

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

答案 3 :(得分:2)

你只需要更改你的陈述,

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

更详细的解释是here

答案 4 :(得分:1)

您定义了一个实例函数。这意味着如果要使用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()

如果您只想拥有一个带有颜色定义的类,我建议您在类或扩展名上使用结构:

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

答案 5 :(得分:0)

可以使用计算属性:

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

然后称之为:

UIColor().customBlueColor

答案 6 :(得分:0)

<强>夫特:

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

答案 7 :(得分:0)

获取此扩展以用于自定义类型UIView

extension UIColor {
    // Method returns a custom color
    static func rgb(red: CGFloat, green: CGFloat, blue: CGFloat) -> UIColor {
        return .init(red: blue / 255, green: green / 255, blue: blue / 255, alpha: 1.0)
    }
}

答案 8 :(得分:0)

UIColor扩展 Swift 5

extension UIColor {
    static var yourColor:UIColor {
        return UIColor(red: 0.745, green: 0.157, blue: 0.074, alpha: 1)
    }
}

使用: view.backgroundColor = .yourColor