首页 > 娱乐前沿 > 热点
R.swift:以一种优雅安全的方式使用照片文件
佚名 2015-12-02 11:10:07

引言:当前使用照片文件存在的问题

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

leticon=UIImage(named:"settings-icon")
letfont=UIFont(name:"SanFrancisco",size:42)
performSegueWithIdentifier("openSettings")

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

R.swift的解决方案

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

leticon=R.image.settingsIcon
letfont=R.font.sanFrancisco(size:42)
performSegueWithIdentifier(R.segue.openSettings)

R如何解决上面的问题:

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

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

支持的照片类型

//使用R.swift之前
letsettingsIcon=UIImage(named:"settings-icon")
letgradientBackground=UIImage(named:"gradient.jpg")
//使用R.swift
letsettingsIcon=R.image.settingsIcon
letgradientBackground=R.image.gradientJpg
//使用R.swift之前
letstoryboard=UIStoryboard(name:"Main",bundle:nil)
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()
//使用R.swift之前
performSegueWithIdentifier("openSettings")
//使用R.swift
performSegueWithIdentifier(R.segue.openSettings)

Nibs

//使用R.swift之前
letnameOfNib="CustomView"
letcustomViewNib=UINib(nibName:"CustomView",bundle:nil)
letrootViews=customViewNib.instantiateWithOwner(nil,options:nil)
letcustomView=rootViews[0]as?CustomView
letviewControllerWithNib=CustomViewController(nibName:"CustomView",bundle:nil)
//使用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)
//使用R.swift之前
lettextCellNib=UINib(nibName:"TextCell",bundle:nil)
tableView.registerNib(textCellNib,forCellReuseIdentifier:"TextCellIdentifier")
//使用R.swift
tableView.registerNib(R.nib.textCell)
//cellForRowAtIndexPath中获取cell
lettextCell=tableView.dequeueReusableCellWithIdentifier(R.nib.textCell.reuseIdentifier,forIndexPath:indexPath)
//使用R.swift之前
letlightFontTitle=UIFont(name:"Acme-Light",size:22)
//使用R.swift
letlightFontTitle=R.font.acmeLight(size:22)
//使用R.swift之前
letjsonURL=NSBundle.mainBundle().URLForResource("seed-data",withExtension:"son")
//使用R.swift
letjsonURL=R.file.seedDataJson

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

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

R.swift的优势有:

支持iOS7.0+

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

运行原理

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

安装

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

上一篇  下一篇

I 相关 / Other

一年都卖的平平淡淡的AppleWatch,会在年底大有起色吗?

Apple Watch 今年到底卖的怎么样,现在看来还没有定论,至少在 FBR 的分析师 Daniel Ives 那里,这款手表以

大公司头条:好莱坞在中国遇冷;巴西大规模经济衰退

我们的微信公众号上线啦,直接搜索「大公司头条」就可以订阅。希望每天早上在邮箱里收到「大公司头条」?点

这个时尚品牌的新款发布平台是:Google街景

对于走休闲路线的服装品牌来说,大概没有什么展示平台比日常生活场景更合适了。所以这个名叫 OneMeth 的时

快圣诞节了,给那些长不大的超龄儿童买啥礼物好呢?

本文由 Coolhunting 授权《好奇心日报》发布,即使我们允许了也不许转载。 每个人的心里都住着一个孩子,节

机器人将引发全球失业危机?

传送门
预告片:机器人Pepper在日本羽田机场上岗,时长1分30秒
腾讯科技 梁辰 12月2日报道一本名为《机器

I 热点 / Hot