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

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

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)

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,062评论 3 119
  • 忆往昔峥嵘岁月,不如看今朝风华正茂。每一阶段的自己都很特别,都有成长的痛和快乐,她在没上幼儿园的时候有不知外面世界...
    薛公子鸣魅阅读 1,639评论 0 0
  • 女人们都渴望自己成为优雅女人,希望把自己的人生活出美感,那么《聪明女人背小包》的晨读分享教你从“背小包”开始吧! ...
    薛薛闲扯阅读 4,423评论 0 5
  • 致今天的你 今天你又强颜欢笑了吧,你别哭。你知道吗?其实我知道你并不喜欢她,但你也没有办法。我知道,你很怕别人的想...
    Lmaging阅读 1,657评论 0 0
  • 想要做到不猜疑真的好难啊。 尤其是我这天蝎座与生俱来的爱猜疑天性属性加持。 对方要是不回消息就会想这想那,但是明明...
    末之天蝎阅读 2,444评论 0 0

友情链接更多精彩内容