读ColorDemo源码学习Swift协议

刘洪宝老师的文章Swift进阶-面向协议看了github的代码,学习了一下, 我添加自己的一些注释。

在Protocol.swift中

定义协议
protocol HexColor {}

扩展协议, 添加一个类方法

extension HexColor where Self: UIColor{ //使用where语句来判断, 当Class 是UIColor的子类时,可以使用协议中的该方法
    /**
     16进制字符串 -> UIColor
     
     - parameter hexString: 16进制颜色值字符串
     
     - returns: UIColor?
     */
    
    static func hexString(hexString: String, alpha: CGFloat = 1.0) -> UIColor?{

举个例子(我自己添加的扩展),下面调用的时候会解释

extension HexColor where Self: UIView { //使用where语句来判断, 当Class 是UIView的子类时,可以使用协议中的该方法
    static func testMethod() -> Void {
        
    }
}

在Config.swift中

public class AppColor: UIColor, HexColor{ // public 类AppColor, UIColor的子类,遵守协议HexColor
    // 类方法,使用class修饰或static
    class func backgroundColor() -> UIColor{
        return self.hexString("#333333", alpha: 0.7)! // 直接调用协议中的hexString类方法
    }
}

在这个类里调用我刚才写的扩展中的方法会报错,见上面代码段中注释

文中还提到了只在单独的文件中使用的颜色可以写在单独的文件中(比如在ViewController.swift)

private class HomeColor: UIColor, HexColor{ // private类,只作用于当前文件
    
    class func titleColor() -> UIColor{
        
        return self.redColor()
    }
    class func subTitleColor() -> UIColor{
        
        return self.hexString("#333333", alpha: 0.7)!
    }
}

你可能感兴趣的:(读ColorDemo源码学习Swift协议)