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

问题描述 投票:0回答:9

我正在尝试创建 UIColor 类的 Swift 扩展作为

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)

我不知道应该传递什么作为该声明的参数。

ios swift extension-methods uicolor
9个回答
49
投票

你已经定义了一个实例方法,这意味着你可以调用 仅在

UIColor
实例上:

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

出现编译器错误“missing argument”是因为 实例方法是 Swift 中的柯里化函数, 所以它可以等效地称为

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

(但这会是一件奇怪的事情,我只将其添加到 解释错误消息的来源。)


但是你真正想要的是一个type方法(

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
实例。


25
投票

使用 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 将白色定义为:

public class var white: UIColor

23
投票

斯威夫特 3、斯威夫特 4、斯威夫特 5:

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

如果您在 *.xcassets (iOS11+) 中使用颜色集。 例如,您有一种名为“appBlue”的颜色。然后:

extension UIColor {

private static func getColorForName(_ colorName: String) -> UIColor {
    UIColor(named: colorName) ?? UIColor.red
}

static var appBlue: UIColor {
    self.getColorForName("appBlue")
}
}

用途:

self.view.backgroundColor = .appBlue

3
投票

获取此定制扩展

UIColor

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

2
投票

你只需要改变你的陈述,

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

更详细的解释是这里


2
投票

可以使用计算属性:

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

然后调用它:

UIColor().customBlueColor

1
投票

您定义了一个实例函数。这意味着您需要一个

UIColor
的实例,以便使用
getCustomBlueColor()
方法。

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

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

注意 func 之前的“类”,因此该方法现在可以作为类方法访问。

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

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

1
投票

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


0
投票

斯威夫特:

extension UIColor {
    open class var yourOrange: UIColor {
        return UIColor.init(colorLiteralRed: 0.988, green: 0.337, blue: 0.063, alpha: 1)
    }
} 
© www.soinside.com 2019 - 2024. All rights reserved.