美文网首页程序员iOS Developer
读ColorDemo源码学习Swift协议

读ColorDemo源码学习Swift协议

作者: alvin_ding | 来源:发表于2016-06-17 16:51 被阅读66次

    刘洪宝老师的文章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类方法
        }
    }
    

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

    QQ20160617-0@2x.png

    文中还提到了只在单独的文件中使用的颜色可以写在单独的文件中(比如在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协议

        本文链接:https://www.haomeiwen.com/subject/uievdttx.html