R.Swift优雅加载资源文件
在新的项目中,接触到了一个很不错的框架R.swift,可以帮助更方便安全的使用资源文件,相信已经使用过的或者还没有接触过的,一旦使用过了解过它,会爱上这个框架工具!
一、R.swift特点
- 当项目build之后,R.swift开始运行,也就是说添加完图片等资源文件时,build一下,R.swift第三方库就会设置好刚刚添加的资源.
- 加入的资源文件在build后自动在R.generated.swift文件中按照类型生成结构体.
- 强类型,不需要类型判断和转换,自动返回对应类型.
- 支持了多种资源类型.
- 避免了资源名称拼写错误.
二、安装
- 添加pod 'R.swift'到你的Podfile文件中,紧接着运行pod install
- 打开工程文件,点击工程文件名称,选择TARGETS,点击Build Phases,在点击左上角的“+”添加New Run Script Phas

3. 脚本输入"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/R.generated.swift",input files 添加 $TEMP_DIR/rswift-lastrun,out files 添加 $SRCROOT/R.generated.swift

4. 拖拽R.generated.swift文件到项目中.
三、具体使用
1. 图片-images
原生写法
let sIcon = UIImage(named: "settings-icon")
使用R.swift
func icon() -> UIImage? {
switch self {
case .sourceRegulator:
return R.image.home_SourceRegulatory()
case .regulation:
return R.image.home_regulationIcon()
case .broker:
return R.image.home_brokerIcon()
case .engine:
return R.image.home_engineIcon()
case .falseBroker:
return R.image.home_falseBrokerIcon()
case .spread:
return R.image.home_spredIcon()
}
}
2. 文件-Files
原始写法
let plistURL = Bundle.main.url(forResource: "Book", withExtension: "plist")
let jsonPath = Bundle.main.path(forResource: "data", ofType: "json")
使用R.swift后
let plistURL = R.file.bookPlist()
let jsonPath = R.file.DataJson.path()
3.字体-Fonts
原始用法
let lightFontTitle = UIFont(name: "chalkduster", size: )
使用R.swift
R.font.chalkduster(size: )
4.Localized strings
原始写法
let welcomeMessage = NSLocalizedString("welcome.message", comment: "")
let settingsTitle = NSLocalizedString("title", tableName: "Settings", comment: "")
// Formatted strings
let welcomeName = String(format: NSLocalizedString("welcome.withName", comment: ""), locale: NSLocale.current, "Alice")
// Stringsdict files
let progress = String(format: NSLocalizedString("copy.progress", comment: ""), locale: NSLocale.current, , )
使用R.swift
// Localized strings are grouped per table (.strings file)
let welcomeMessage = R.string.localizable.welcomeMessage()
let settingsTitle = R.string.settings.title() // Functions with parameters are generated for format strings
let welcomeName = R.string.localizable.welcomeWithName("Alice") // Functions with named argument labels are generated for stringsdict keys
let progress = R.string.localizable.copyProgress(completed: , total: )
上面就是本人项目经常使用到的,当然还有其他的用法和用处,不过,通过R.swift已经大大的方便我们日常开发,希望大家在项目中尽早的使用R.swift这个第三方库.
R.Swift优雅加载资源文件的更多相关文章
- Maven,预加载资源文件
预加载资源文件需要先启用功能: <build> <resources> <resource> <directory>src/main/resources ...
- 动态加载资源文件(ResourceDictionary)
原文:动态加载资源文件(ResourceDictionary) 在xaml中控件通过绑定静态资源StaticResource来获取样式Style有多种方式: 1.在项目的启动文件App中<App ...
- Java加载资源文件的两种方法
处理配置文件对于Java程序员来说再常见不过了,不管是Servlet,Spring,抑或是Structs,都需要与配置文件打交道.Java将配置文件当作一种资源(resource)来处理,并且提供了两 ...
- Spring boot 国际化自动加载资源文件问题
Spring boot 国际化自动加载资源文件问题 最近在做基于Spring boot配置的项目.中间遇到一个国际化资源加载的问题,正常来说只要在application.properties文件中定义 ...
- Style样式的四种使用(包括用C#代码动态加载资源文件并设置样式)
Posted on 2012-03-23 11:21 祥叔 阅读(2886) 评论(6) 编辑 收藏 在Web开发中,我们通过CSS来控制页面元素的样式,一般常用三种方式: 1. 内联样式 ...
- PyQt5(5)——加载资源文件
在实际中我们需要美化界面,就需要许多的自定义图片. 但是我们发现直接导入图像使用,等程序运行时会报错.???? 这就需要建立资源文件并且加载它们,程序就可以顺利运行了. 设计界面是如何加载资源文件呢? ...
- assets 加载资源文件
引用:http://abc20899.iteye.com/blog/1096620 1.获取资源的输入流 资源文件 sample.txt 位于 $PROJECT_HOME/assets/ 目录下,可以 ...
- Java加载资源文件几种方法
from: http://andyzhu.blog.51cto.com/4386758/775836/ import java.net.URL; import org.springframework. ...
- NHibernate动态加载资源文件
最近做项目,又用到了以前做过的ORM框架--NHibernate. 此次想要实现的目标: 1.简单SQL用NHibernate的Session的CRUD方法实现 2.复杂SQL用Native SQL实 ...
随机推荐
- Spring boot 官网学习笔记 - logging
commons-logging和slf4j是java中的日志门面,即它们提供了一套通用的接口,具体的实现可以由开发者自由选择.log4j和logback则是具体的日志实现方案. 比较常用的搭配是com ...
- mysql 排序规则
一.对比 1.utf8_general_ci 不区分大小写,utf8_general_cs 区分大小写 2.utf8_bin: compare strings by the binary value ...
- linux常用开发命令总结
linux常用命令 文件操作命令 1. cd 目录名/目录名 切换目录 cd .. 切换到上一级目录 (change dictionary) Ctrl+C强制退出命令行,回到上一级 2.ls ...
- 挑战程序设计——迷宫的最短路径(BFS)
题目详情 Description 给定一个大小为 N * M 的迷宫.迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动.请求出从起点到终点所需的最小步数 限制条件: N,M <= ...
- 爬虫那点事,干就玩了之seleunim
目录 selenium 环境准备 代码环境 开始爬虫 操作js 截图 切换窗口 在当前窗口切换访问地址 管理cookie # 加入战队 微信公众号 # 加入战队 微信公众号 做技术我们最重要的是[做] ...
- 斐波那契数列n项的值。(递归和非递归算法Golang实现)
递归实现: func f(num int) int { if num == 1 || num == 2 { return 1 } return f(num-1) + f(num-2) } 非递归实现: ...
- Nebula 架构剖析系列(零)图数据库的整体架构设计
Nebula Graph 是一个高性能的分布式开源图数据库,本文为大家介绍 Nebula Graph 的整体架构. 一个完整的 Nebula 部署集群包含三个服务,即 Query Service,S ...
- jmeter从获取token开始设计接口
用自己实习时候的一个项目来实现一下获取token的接口测试 以登录dmp的学科列表为例子: 从登录开始,打开开发者选项 点击登录 在开发者窗口中network xhr Fildder中,看登录时的请求 ...
- JS中的排序算法-冒泡排序解析
冒泡排序算法 例子:10,8,9,6,4,20,5 从小到大排序 第一轮 1)10>8 交换数据 得到:8,10,9,6,4,20,5 2)10>9 交换数据 得到:8,9,10, ...
- java集合类之ArrayList详解
一.ArrayList源码分析 1.全局变量 (1)默认容量(主要是通过无参构造函数创建ArrayList时第一次add执行扩容操作时指定的elementData的数组容量为10) private s ...