R.Swift引用资源文件-新闻详情

R.Swift引用资源文件


发布时间:2018-11-29责任编辑:满帅 浏览:1390


  • 在iOS中当我们引用一张图片的时候, 我们需要创建一个UIImage对象去引用图片

  • 当我们需要解析json或者plist文件的时候, 通常以Bundle.main的方式去解析

1
2
let oldImage = UIImage(named: "yellow-image")
 
let jsonData = Bundle.main.path(forResource: "menuList", ofType: "json")
  • 这里得到的oldImagejsonData都是Optional类型, 那么这样就会有一个问题: 如果以上文件名字修改了或者输错了, 那么得到的结果就是空的, 后期处理的时候就可能会程序崩溃或者没有数据

  • 而且类似方法接受的都是字符串对象, 所以即使传入的错误的字符串, 编译程序的时候也不会报错

  • 为了完美的解决上面的问题, 这里介绍一个高效引用资源文件的框架R.Swift

什么是R.Swift

  • R.Swift是一款基于Swift平台,针对iOS以及tvOS开发的资源引用框架

  • 它所针对的问题,就是类似于上面提到的一样,避免使用字符串来构造某些资源实例

  • R.Swift能够使用类似语法R.资源类型.资源名称来对某资源进行引用构建

  • R.Swift有着动态生成代码的机制, 它具有以下优点:

    • 代码自动补全:就像输入其他的代码一样,R.Swift支持IDE的代码自动补全

    • 自动检测: 可以自动检测代码是否存在问题, 当我们的资源文件名修改的时候, 这是就会提示资源引用错误

安装和配置R.Swift

安装

  • 使用CocoaPods来对R.Swift进行安装

  • 在你的Podfile文件中添加如下代码, 并在终端运行pod install

1
pod 'R.swift'

配置信息

  1. 如下图所示, 添加一个New Run Script Phase

0.png

  1. Run      Script拖动到Check Pods Manifest.lock的下面, 并添加脚本

1
"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT"

00.png

  1. 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()


项目开发组  供稿