刘洪宝老师的文章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)!
}
}
网友评论