美文网首页
Swift | 关于 struct 的一些优雅实践

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

作者: Lol刀妹 | 来源:发表于2020-05-13 01:16 被阅读0次

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

    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)
    

    爽不爽?

    相关文章

      网友评论

          本文标题:Swift | 关于 struct 的一些优雅实践

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