R.swift:以一种优雅安全的方式使用资源文件

R.swift:以一种优雅安全的方式使用资源文件,第1张

概述https://github.com/zhiguangqiao/R.swift 先来看下目前如果我们要使用资源文件时代码是如何调用的: 1 2 3 let icon = UIImage(named:  "settings-icon" )  let font = UIFont(name:  "San Francisco" , size: 42)  performSegueWithIdentifier

https://github.com/zhiguangqiao/R.swift


先来看下目前如果我们要使用资源文件时代码是如何调用的:

1 2 3 leticon=UIImage(named: "settings-icon" ) letFont=UIFont(name: "SanFrancisco" ,size:42) performSegueWithIDentifIEr( "openSettings" )

这种通过传入字符串来获取资源有很大的潜在的风险:

最常见的就是资源名称拼写错误。如果项目资源很多检查拼写正确也是颇费时间

如果删除了一个资源文件,只能通过全局搜索资源名称来判断是否已经没有使用这个资源

R.swift的解决方案

先看下上面的逻辑用R.swift代码调用:

leticon=R.image.settingsIconletFont=R.Font.sanFrancisco(size:42)performSegueWithIDentifIEr(R.segue.openSettings)

R如何解决上面的问题:

强类型

使用一个资源前,先声明是什么类型。如果是一个图片资源就是R.image.xx。这样每次明确知道使用的资源类型。(swift是一门强类型语言,强类型的一个好处就是很多错误可以在编译时就发现)

编译时检查资源文件是否存在

自动填充资源名称

因为会自动根据资源文件生成结构体,所以可以直接使用,不用自己拼写资源名

支持的资源类型

Images

3 4 5 6
//使用R.swift之前 letsettingsIcon=UIImage(named: ) letgradIEntBackground=UIImage(named: "gradIEnt.jpg" ) //使用R.swift letsettingsIcon=R.image.settingsIcon letgradIEntBackground=R.image.gradIEntJpg

Storyboards

6 7 8 9 10 11 12 13
letstoryboard=UIStoryboard(name: "Main" letinitialTabbarController=storyboard.instantiateInitialVIEwController()as?UITabbarController letsettingsController=self.instantiateVIEwControllerWithIDentifIEr( "settingsController" )as?SettingsController //使用R.swift letstoryboard=R.storyboard.main.instance letinitialTabbarController=R.storyboard.main.initialVIEwController letsettingsController=R.storyboard.main.settingsController //通过这个代码来校验运行时storyboard的图片是否都能被加载 //只在deBUG模式下有效,会通过断言来提示 R.storyboard.main.valIDateImages() //在运行时校验所有的vIEwController能够被正常加载 mode.R.storyboard.main.valIDateVIEwControllers()

Segues

4
) //使用R.swift Nibs

12
letnameOfNib= "CustomVIEw" letcustomVIEwNib=UINib(nibname: "CustomVIEw" letrootVIEws=customVIEwNib.instantiateWithOwner(nil,options:nil) letcustomVIEw=rootVIEws[0]as?CustomVIEw letvIEwControllerWithNib=CustomVIEwController(nibname: //使用R.swift letnameOfNib=R.nib.customVIEw.name letcustomVIEwNib=R.nib.customVIEw letrootVIEws=R.nib.customVIEw.instantiateWithOwner(nil,options:nil) letcustomVIEw=R.nib.customVIEw.firstVIEw(nil,options:nil) letvIEwControllerWithNib=CustomVIEwController(nib:R.nib.customVIEw)

Reusable cells

7
lettextCellNib=UINib(nibname: "TextCell" tableVIEw.registerNib(textCellNib,forCellReuseIDentifIEr: "TextCellIDentifIEr" tableVIEw.registerNib(R.nib.textCell) //cellForRowAtIndexPath中获取cell lettextCell=tableVIEw.dequeueReusableCellWithIDentifIEr(R.nib.textCell.reuseIDentifIEr,forIndexPath:indexPath)

Custom fonts

letlightFontTitle=UIFont(name:"Acme-light"letlightFontTitle=R.Font.acmelight(size:22)

Resource files

4
letJsonURL=NSBundle.mainBundle().URLForResource( "seed-data" "son" letJsonURL=R.file.seedDataJson

和同类型的其他开源库对比的优势

其他同类型的第三方库有:Shark,Natalie,SwiftGen

R.swift的优势有:

通过项目文件(Xcodeproj)来检测资源而不是通过扫描文件里的资源

支持多种资源类型

设计之初接口就希望接近苹果原生API,让你快速上手

支持iOS7.0+

强烈建议项目只支持稳定的iOS8,但是这个库确实支持iOS7

运行原理

每当项目build时,R.swift开始运行。它会侦测工程文件里包含的资源文件,接着生成一个 R.generated.swift的文件。这个文件根据项目里的资源文件按照类型生成结构体。

安装

因为R.swift是在每次项目编译时运行,所以配置和其他第三方库有些区别。这里单独写了一篇介绍Installation:如何安装R.swift

总结

以上是内存溢出为你收集整理的R.swift:以一种优雅安全的方式使用资源文件全部内容,希望文章能够帮你解决R.swift:以一种优雅安全的方式使用资源文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1079299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)