1. 资源包装类

资源:项目中使用的图片、颜色、字体、常量、多语言等。

为了方便管理项目资源,UtilCore组件新增了几个资源包装类,后续请确保项目统一使用包装类调用资源。

如果只在业务组件中使用,请为以下几个包装类分别做扩展,确保资源调用的高度统一。

1.1. 解决的问题

  • 明确项目中所有使用的字体、颜色、图片等,资源统一管理,为后续主题做铺垫。
  • 如果项目全部替换为通过包装类使用资源,那么一旦某个颜色、图片不用了,可以直接删除包装类的定义,再删除具体的资源,减少垃圾资源的存在。
  • 代码风格统一,调用简单清晰。

1.2. GWColor.swift

public extension UIColor {
    /// 根据模式(正常/暗黑)渲染颜色
    /// - Parameters:
    ///   - normal: 正常Hex
    ///   - dark: 暗黑Hex
    /// - Returns: 颜色
    static func renderColor(_ color: GWDynamicColor) -> UIColor {
        var result: UIColor?
        if #available(iOS 13, *) {
            result = UIColor(dynamicProvider: { (traitCollection) -> UIColor in
                (traitCollection.userInterfaceStyle == .dark ? UIColor(hexString: color.dark) ?? UIColor.white : UIColor(hexString: color.normal)) ?? UIColor.white
            })
        } else {
            result = UIColor(hexString: color.normal)
        }
        return result ?? UIColor.white
    }
}
/**
 颜色包装类
 - UtilCore及其它业务组件通用的颜色在这里定义
 - 通过使用包装类方便管理颜色
 - 业务组件可以通过Extensions去扩展自己的颜色
 - 使用:GWConstant.xC7C3C3
 */
/// 动态颜色类型
public typealias GWDynamicColor = (normal: String, dark: String)

public enum GWColor {
    public static let xC7C3C3 = UIColor.renderColor(GWDynamicColor("#C7C3C3", "#C7C3C3"))
    public static let x2F2F2F = UIColor.renderColor(GWDynamicColor("#2F2F2F", "#2F2F2F"))
    public static let xF6F6F6 = UIColor.renderColor(GWDynamicColor("#F6F6F6", "#F6F6F6"))
    public static let x2D78FF = UIColor.renderColor(GWDynamicColor("#2D78FF", "#2D78FF"))
    // ...
}

1.3. GWConstant.swift

/**
 常量包装类
 - UtilCore及其它业务组件通用的常量在这里定义
 - 通过使用包装类方便管理常量
 - 业务组件可以通过Extensions去扩展自己的常量
 - 使用:GWConstant.xxx
 */
public struct GWConstant {

}

1.4. GWFont.swift

/**
 字体包装类
 - UtilCore及其它业务组件通用的字体在这里定义
 - 通过使用包装类方便管理字体
 - 业务组件可以通过Extensions去扩展自己的字体
 - 使用:GWLocalized.r11
 */
public struct GWFont {

    public static let r11 = UIFont.appRegularFontWith(size: 11)
    public static let r12 = UIFont.appRegularFontWith(size: 12)
    public static let r14 = UIFont.appRegularFontWith(size: 14)
    public static let r16 = UIFont.appRegularFontWith(size: 16)
    public static let r20 = UIFont.appRegularFontWith(size: 20)
    public static let m20 = UIFont(mediumFontWithSize: 20)
}

1.5. GWImage.swift

/**
 图片包装类
 - UtilCore及其它业务组件通用的图片在这里定义
 - 通过使用包装类方便管理图片
 - 业务组件可以通过Extensions去扩展自己的图片
 - 使用:GWImage.ruNoContent
 */
public struct GWImage {

    // MARK: - UIView+Empty

    /// 俄罗斯·没数据
    static var ruNoContent: UIImage? {
        UIImage(inUtilCore: "img_russia_common_no_content")
    }
    /// 俄罗斯·无网络
    static var ruNoNetwork: UIImage? {
        UIImage(inUtilCore: "img_russia_common_no_network")
    }
    /// 泰国·没数据
    static var thNoContent: UIImage? {
        UIImage(inUtilCore: "no_content")
    }
    /// 泰国·无网络
    static var thNoNetwork: UIImage? {
        UIImage(inUtilCore: "no_network")
    }
    /// 泰国·服务器错误
    static var thServerError: UIImage? {
        UIImage(inUtilCore: "load_failure")
    }
}

1.6. GWLocalized.swift

/**
 多语言包装类
 - UtilCore及其它业务组件通用的多语言在这里定义
 - 通过使用包装类方便管理多语言
 - 业务组件可以通过Extensions去扩展自己的多语言
 - 使用:GWLocalized.loading
 */
public struct GWLocalized {
    /// 提交中
    public static var loading: String {
        GWI18n.R.string.localizable.base_loading()
    }
    /// Yes
    public static var yes: String {
        GWI18n.R.string.localizable.base_yes()
    }
    /// No
    public static var no: String {
        GWI18n.R.string.localizable.base_no()
    }
    /// 无网络
    public static var noNetwork: String {
        GWI18n.R.string.localizable.base_net_lost()
    }
    /// 发布
    public static var publish: String {
        GWI18n.R.string.localizable.re_publish()
    }
    /// 确认
    public static var confirm: String {
        GWI18n.R.string.localizable.base_sure()
    }
    /// 取消
    public static var cancel: String {
        GWI18n.R.string.localizable.base_cancel()
    }
}

results matching ""

    No results matching ""