美文网首页Swift Label篇
swift项目定义字体的方法(便捷的方法)

swift项目定义字体的方法(便捷的方法)

作者: 栋柠柒 | 来源:发表于2018-08-24 22:51 被阅读164次

    首先我们为了书写方便,需要把常用的几种字体写成枚举类型的方式,比如这样

    public enum XDFont: String {
        #if os(iOS){
            case pingFangSCUltralight = "PingFangSC-Ultralight"
            case pingFangSCRegular = "PingFangSC-Regular"
            case pingFangSCSemibold = "PingFangSC-Semibold"
            case pingFangSCThin = "PingFangSC-Thin"
            case pingFangSCLight = "PingFangSC-Light"
            case pingFangSCMedium = "PingFangSC-Medium"
          }
    }
    

    然后再写一个UIFont的类扩展

    import UIKit
    
    extension UIFont {
        /// Create a UIFont object with a `Font` enum
        public convenience init?(font: XDFont, size: CGFloat) {
            let fontIdentifier: String = font.rawValue
            self.init(name: fontIdentifier, size: size)
        }
    }
    

    使用的时候就可以这样用

    let font = UIFont.init(font: XDFont.pingFangSCRegular, size: 15)
    

    有没有很方便,免去手打字体名的烦恼了
    作为爱折腾的我,心里想着一定有更简单的方法,那就是利用swift强大的协议扩展,进一步简化代码,这也是很swift的编程方式
    具体步骤如下:
    1.先声明一个名为FontRepresentable的协议,这个协议是继承自RawRepresentable的,顾名思义是一个用于枚举类型的扩展协议

    import UIKit
    
    public protocol FontRepresentable: RawRepresentable {}
    
    
    

    2.然后把它扩展到String类型的枚举,联想到上面的String类型的枚举,很容易就想到第三步

    extension FontRepresentable where Self.RawValue == String {
        public func of(size: CGFloat) -> UIFont? {
            return UIFont(name: rawValue, size: size)
        }
    
        public func of(size: Double) -> UIFont? {
            return UIFont(name: rawValue, size: CGFloat(size))
        }
    }
    

    3.接下来,我们定义的结构体类型需要实现这个协议

    public enum XDFont: String, FontRepresentable{
           #if os(iOS){
            case pingFangSCUltralight = "PingFangSC-Ultralight"
            case pingFangSCRegular = "PingFangSC-Regular"
            case pingFangSCSemibold = "PingFangSC-Semibold"
            case pingFangSCThin = "PingFangSC-Thin"
            case pingFangSCLight = "PingFangSC-Light"
            case pingFangSCMedium = "PingFangSC-Medium"
          }
    }
    

    所以我们就能这样用

    let font = XDFont.pingFangSCRegular.of(size: 15)
    

    是不是就不用谢初始化代码了,也有代码提示了

    相关文章

      网友评论

        本文标题:swift项目定义字体的方法(便捷的方法)

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