我正在参加「掘金·启航计划」
引言
编码时,当我们需要引用颜色、字体、图片等资源文件时,往往都是硬编码的方式,比如加载图片:
UIImage(named: "logo"),显然这种字符串的硬编码不够优雅。
有多个第三方库可以帮助我们解决这个问题,比如:SwiftGen,如果你想自定义API,那不妨看看这篇文章提供的思路。
设置
新建一个项目:MyProject,或者使用现有的项目。然后添加一个Package,我们可以在这里保存一些资源文件和代码文件。
保存到项目的根文件夹中,并添加到项目中。
现在,项目的目录结构应该是这样的:
这时候,Package 的 name 和 library的 name 是一样的,为了便于区分,我们把 library的 name 换成 Assets。修改的位置如图所示:
修改好后,把 Assets 添加 Frameworks,Libraries,and Embedded Content
到此,前戏结束。接下来进入战斗~
Colors
我们先从定义 color 开始~
当我们用 Xcode 创建一个项目时,默认会生成 Asset.xcassets,通常我们会把图片、颜色等资源一股脑扔进去,随着时间的推移,资源越来越多,它就会变得臃肿,难以查找。
这里我们先为 Colors 创建一个新的文件夹:Colors.xcassets,放在如下图所示位置
然后往其中添加几个你喜欢的颜色:
再为这些颜色定义个类型,方便后期调用:
❗️❗️❗️因为当前在另一个模块中,而不是我们自己的iOS项目中,所以需要指定 bundle 为 .module。否则导入该模块的目标会在自己的模块中查找颜色。
现在就可以方便的使用自定义颜色啦~
Images
接下来,再把上面的方法应用在图片上,先在如图位置创建 Images.xcassets。并添加你需要的图片。
与定义颜色类型类似,定义代表图片的类型 AppImage
可以从 Images.xcassets 文件中获取 moon图片,也可以 SF Symbols 中获取 star 图片。 运行下面的代码来查看下效果吧~
大功告成~
Fonts
接下来,看下如何处理字体。
我们先定义个类型 AppFont:
定义了两种字体:title 和 subtitle。
title:使用自定义字体,
subtitle:使用内置的动态类型字体 Comic Neue 提取码: a4p4
下载上面的自定义字体,并导入 Package
由于我们已经将字体导入到包文件夹中,因此需要在Package.swift 中将其声明为资源:
这样可以确保我们在使用或者分发这个package时,我们的字体包含在里面。
在使用字体时,不像使用颜色或图片那样容易指定模块。我们必须向 Core Text 的字体管理器注册字体。
将下面的代码片段添加到 AppFont.swift:
我们还需要在应用程序启动时调用这个函数:
现在就可以使用字体了:
Tips
随着项目中资源文件越来越多,需要对资源文件进行分组,比如图片,如果把所有的图片都定义在同一个枚举里,就显得很乱,不好区分。那怎么样能把图片分为 Tab、Login等组别呢,看下面~
给 AppImage 添加 extension,并定义枚举 Tab,里面放App的tab图片,使用时就像这样:
小结
上面的方式,xdm觉得怎么样?欢迎评论交流~