Swift学习

Swift extension的妙用

2020-08-05  本文已影响0人  啧啧同学

1.简单介绍extension

在Swift中扩展可以:

注意:
1.扩展可以向类型添加新功能,但不能覆盖现有功能。2. 扩展可以添加新的计算属性,但它们不能添加存储属性,或向现有属性添加属性观察者。

语法

extension SomeType {
    // new functionality to add to SomeType goes here
}

应用

1.字体拓展

先看一下拓展后的🌰:

let label = UILabel()

/* 13 号 PingFangSC-Light 字体 */
label.font = UIFont.pfLight(ofSize: 13.0)

/* 10 号 PingFangSC-Regular 字体 */
label.font = UIFont.pfRegular(10.0)

/* 12 号 PingFangSC-Medium 字体 */
label.font = UIFont.pfMedium(12.0)

/* 13 号  PingFangSC-Semibold 字体 */
label.font = UIFont.pfSemibold(ofSize: 13.0)

具体实现的代码

extension UIFont {
    
    enum FontName {
        
        case pingfang, pingfangLight, pingfangMedium, pingfangSemibold
        var name: String {
            switch self {
            case .pingfang:
                return "PingFangSC-Regular"
            case .pingfangLight:
                return "PingFangSC-Light"
            case .pingfangMedium:
                return "PingFangSC-Medium"
            case .pingfangSemibold:
                return "PingFangSC-Semibold"
            }
        }
    }
    
    class func pfRegular(_ fontSize: CGFloat) -> UIFont {
        let font = UIFont.font(type: .pingfang, fontSize: fontSize)
        return font
    }
    
    class func pfLight(_ fontSize: CGFloat) -> UIFont {
        let font = UIFont.font(type: .pingfangLight, fontSize: fontSize)
        return font
    }
    
    class func pfMedium(_ fontSize: CGFloat) -> UIFont {
        let font = UIFont.font(type: .pingfangMedium, fontSize: fontSize)
        return font
    }
    
    class func pfSemibold(_ fontSize: CGFloat) -> UIFont {
        let font = UIFont.font(type: .pingfangSemibold, fontSize: fontSize)
        return font
    }
    
    class func font(type: FontName, fontSize size: CGFloat) -> UIFont {
        guard let font = UIFont(name: type.name, size: size) else {
            return .systemFont(ofSize: size)
        }
        return font
    }
}

2.图片拓展

//颜色初始化图片
extension UIImage {
    
    @objc
    public static func from(color: UIColor) -> UIImage? {
        
        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
        
        UIGraphicsBeginImageContext(rect.size)
        
        guard let context = UIGraphicsGetCurrentContext() else { return nil }
        
        context.setFillColor(color.cgColor)
        
        context.fill(rect)
        
        let image = UIGraphicsGetImageFromCurrentImageContext()
        
        UIGraphicsEndImageContext()
        
        return image
    }
}
上一篇 下一篇

猜你喜欢

热点阅读