发布时间:2018-11-29责任编辑:满帅 浏览:1390
在iOS中当我们引用一张图片的时候, 我们需要创建一个UIImage
对象去引用图片
当我们需要解析json
或者plist
文件的时候, 通常以Bundle.main
的方式去解析
1 | let oldImage = UIImage(named: "yellow-image") |
这里得到的oldImage
和jsonData
都是Optional
类型, 那么这样就会有一个问题: 如果以上文件名字修改了或者输错了, 那么得到的结果就是空的, 后期处理的时候就可能会程序崩溃或者没有数据
而且类似方法接受的都是字符串对象, 所以即使传入的错误的字符串, 编译程序的时候也不会报错
为了完美的解决上面的问题, 这里介绍一个高效引用资源文件的框架R.Swift
R.Swift
R.Swift是一款基于Swift
平台,针对iOS
以及tvOS
开发的资源引用框架
它所针对的问题,就是类似于上面提到的一样,避免使用字符串来构造某些资源实例
R.Swift
能够使用类似语法R.
资源类型.资源名称
来对某资源进行引用构建
R.Swift
有着动态生成代码的机制, 它具有以下优点:
代码自动补全:就像输入其他的代码一样,R.Swift
支持IDE
的代码自动补全
自动检测: 可以自动检测代码是否存在问题, 当我们的资源文件名修改的时候, 这是就会提示资源引用错误
使用CocoaPods
来对R.Swift
进行安装
在你的Podfile
文件中添加如下代码, 并在终端运行pod install
1 | pod 'R.swift' |
如下图所示, 添加一个New Run Script Phase
将Run Script
拖动到Check Pods Manifest.lock
的下面, 并添加脚本
1 | "$PODS_ROOT/R.swift/rswift" generate "$SRCROOT" |
Command+B
编译项目,在项目代码目录下,会生成一个R.generated.swift
的文件,将它拖如项目中
注意:
不要勾选Copy items if needed
选项,因为每次编译都会生成新的R.generated.swift
文件,copy
的话,旧的R.generated.swift
将不会被覆盖
每当我们修改了资源,我们需要Command + B
来编译一下项目从而让R.Swift
自动进行配置更新
R.Swift的使用
Images - 图片
//传统方式
let oldImage = UIImage(named: "yellow-image")
oldImageView.image = oldImage
//R.Swift方式
let newImage = R.image.yellowImage()
newImageView.image = newImage
Custom fonts - 字体
这里需要注意的一点是, 字体的引用需要引入一个ttf格式的字体文件, 不然无法编译除类似acmeLight的函数
//传统方式
let lightFontTitle = UIFont(name: "Acme-Light", size: 22)
//R.Swift方式
let lightFontTitle = R.font.acmeLight(size: 22)
Resource files - 数据文件
//传统方式
let jsonData = Bundle.main.path(forResource: "menuList", ofType: "json")
let jsonUrl1 = Bundle.main.url(forResource: "menuList", withExtension: "json")
//R.Swift方式
let jsonData2 = R.file.menuListJson.path()
let newUrl = R.file.menuListJson()
项目开发组 供稿