R.swift:以一种优雅安全的方式使用照片文件
2015-12-02 11:10:07 | 来源:玩转帮会 | 投稿:佚名 | 编辑:小柯

原标题:R.swift:以一种优雅安全的方式使用照片文件

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

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

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是一门强类型语言,强类型的一个好处就是很多错误可以在编译时就发现)

  • 编译时检查照片文件是否存在

  • 自动填充照片名称

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

支持的照片类型

  • Images

//使用R.swift之前
letsettingsIcon=UIImage(named:"settings-icon")
letgradientBackground=UIImage(named:"gradient.jpg")
//使用R.swift
letsettingsIcon=R.image.settingsIcon
letgradientBackground=R.image.gradientJpg
  • Storyboards

//使用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()
  • Segues

//使用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)
  • Reusable cells

//使用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)
  • Custom fonts

//使用R.swift之前
letlightFontTitle=UIFont(name:"Acme-Light",size:22)
//使用R.swift
letlightFontTitle=R.font.acmeLight(size:22)
  • Resource files

//使用R.swift之前
letjsonURL=NSBundle.mainBundle().URLForResource("seed-data",withExtension:"son")
//使用R.swift
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

tags:

上一篇  下一篇

相关:

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

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

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

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

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

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

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

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

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

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

想让画面更好看,跟大师学几种简单的构图方法

莫里斯·诺布尔(Maurice Noble)是美国传奇动画设计师、Layout 设计师。对动画产业贡献长达 60 多年

几点出生的宝宝注定一生富贵


  现在女人生孩子都讲究一个时间点,为什么呢?因为出生日期能够影响小

郑伊性感诱惑

王妡蕾性感写真暖

宗弋莆BeachQueen泳装

站长推荐: