Swift | 关于 struct 的一些优雅实践

2020-05-13  本文已影响0人  Lol刀妹

之前已经说过了,寻求优雅的最佳捷径就是细品苹果的代码

1. 细品苹果的代码

下面这段代码,写过富文本的肯定都不陌生:

NSAttributedString.Key.foregroundColor

其中的Key就是一个 struct:

extension NSAttributedString {

    public struct Key : Hashable, Equatable, RawRepresentable {

        public init(_ rawValue: String)

        public init(rawValue: String)
    }
}

foregroundColorNSAttributedString.Key扩展的属性。

extension NSAttributedString.Key {

    /************************ Attributes ************************/

    @available(iOS 6.0, *)
    public static let foregroundColor: NSAttributedString.Key // UIColor, default blackColor

}

2. 优雅实践

举个例子,想必不少人实际开发中都添加过自定义字体,添加完后,可以直接使用,如:

let font = UIFont.init(name: "CustomFontName", size: 20)

这样写没问题,但是硬编码着实有点蛋疼。

于是仿照苹果的NSAttributedString.Key.foregroundColor践行了一波优雅:

extension UIFont {
    
    struct Name {
        
    }
    
}

extension UIFont.Name {
    
    static let SFProText_Heavy = "SFProText-Heavy"
    static let SFProText_LightItalic = "SFProText-LightItalic"
    static let SFProText_HeavyItalic = "SFProText-HeavyItalic"
    
}

但我觉得没必要照搬,所以稍微改了一下结构:

extension UIFont {
    
    struct Name {
        static let SFProText_Heavy = "SFProText-Heavy"
        static let SFProText_LightItalic = "SFProText-LightItalic"
        static let SFProText_HeavyItalic = "SFProText-HeavyItalic"
    }
    
}

使用都是一样的:

let font = UIFont.init(name: UIFont.Name.SFProText_Heavy, size: 20)

爽不爽?

上一篇下一篇

猜你喜欢

热点阅读