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

19 extension-methods uicolor ios swift

我是一个非常新的快速尝试创建UIColor类的扩展

extension UIColor{

    func getCustomBlueColor() -> UIColor{

    return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)

    }
Run Code Online (Sandbox Code Playgroud)

在此之后我访问了方法

btnShare.setTitleColor(UIColor.getCustomBlueColor(**UIColor**), forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*n R 47

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

let col = UIColor().getCustomBlueColor()
// or in your case:
btnShare.setTitleColor(UIColor().getCustomBlueColor(), forState: .Normal)
Run Code Online (Sandbox Code Playgroud)

编译器错误"缺少参数"发生是因为 实例方法是Swift中的Curried Functions,所以它可以等效地被称为

let col = UIColor.getCustomBlueColor(UIColor())()
Run Code Online (Sandbox Code Playgroud)

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


但你真正想要的是一种类型方法(class func)

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

被称为

let col = UIColor.getCustomBlueColor()
// or in your case:
btnShare.setTitleColor(UIColor.getCustomBlueColor(), forState: .Normal)
Run Code Online (Sandbox Code Playgroud)

无需先创建UIColor实例.


Gen*_*rco 24

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

var myColor: UIColor = .white // or .clear or whatever
Run Code Online (Sandbox Code Playgroud)

因此,如果你想要类似的东西,比如下面......

var myColor: UIColor = .myCustomColor
Run Code Online (Sandbox Code Playgroud)

...然后,您将像这样定义扩展名:

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

事实上,Apple将白色定义为:

public class var white: UIColor
Run Code Online (Sandbox Code Playgroud)

  • TheCodingArt - 这是你的意见,不是事实.事实上,你的投票和评论都是误导性的,坦率地说是不负责任的.使用类型推断与显式类型转换的编译输出是相同的.请参阅:http://stackoverflow.com/questions/24588893/swift-explicit-vs-inferred-typing-performance我,首先,我更喜欢我的代码对你发布的内容的可读性,但是,与你的一样,这也是只有一个意见. (3认同)
  • 我已经检查了指南,并且找不到任何Apple声明应该总是使用类型推断而不是显式类型转换的部分.我也没有看到任何关于为什么这更合适的文章或解释.如果它是"最佳实践",那么根据定义,它是一种观点,而不是一个事实.我刚刚在我的上一条评论中提供了一个链接,它表明它们都编译为相同的输出.如果您提供链接到您引用的任何内容,这将有所帮助. (3认同)

Yur*_*nko 18

Swift 3,Swift 4:

extension UIColor {
   static let myBlue = UIColor(red:0.043, green:0.576 ,blue:0.588, alpha:1.00) 
}
Run Code Online (Sandbox Code Playgroud)

使用:

btnShare.setTitleColor(.myBlue, for: .normal)
Run Code Online (Sandbox Code Playgroud)

要么

self.view.backgroundColor = .myBlue
Run Code Online (Sandbox Code Playgroud)