内容简介:R.swift是一个高效引入iOS资源的框架,避免了使用字符串引入资源文件导致程序崩溃的尴尬。 目前R.swift支持到Swift4.0版本使用代码的方式来引入资源:示例:
R.swift是一个高效引入iOS资源的框架,避免了使用字符串引入资源文件导致程序崩溃的尴尬。 目前R.swift支持到Swift4.0版本
优势
使用代码的方式来引入资源:
- 类型完整 : 减少推断和转换方法返回值的类型
- 编译时检查 : 不会再因为不正确的字符串导致App产生运行时崩溃
- 自动补全 : 不再需要输入图片名称
示例:
之前:
let image = UIImage(named: "imageName") 复制代码
R.swift:
let image = R.image.imageName() 复制代码
功能
使用 R.swift
之后,可以使用 R
结构体来获取资源文件。如若资源文件发生改变, R.swift
会正确的清除\改变\增加资源。
R.swift
目前支持如下几种资源:
- Images
- Fonts
- Resource files
- Colors
- Localized String
- StoryBoard
- Segues
- Nibs
- Reuseable cells
接入方式
CocoaPods
-
添加
pod R.swift
至Podfile
文件中之后终端执行pod install
-
Xcode
配置:在当前项目的targets
中选择Build phrase
,点击+
号选择添加New Run Script Phase
, -
将
Run Script
移动至Compile sources
之上,Check Pods Manifest.lock
之下。在Run Script
中添加:"$PODS_ROOT/R.swift/rswift" "$SRCROOT"
, -
编译你的项目,在
Finder
中你会看到R.generated.swift
在Pod
文件中,将该文件拖动至项目中,切记千万 不要 勾选Copy items if needed
, -
新增\删除\修改资源文件之后都需要重新
command+B
编译项目,保证正确引用。
使用方式
1、Images
之前:
let png = UIImage(named: "png") let jpg = UIImage(named: "jpg.jpg") 复制代码
R.swift:
let png = R.image.png() let jpg = R.imgae.jpgJpg() 复制代码
2、Custom fonts
之前:
let customFont = UIFont(name: "Acme-Light", size: 22) 复制代码
R.swift:
let customFont = R.font.acmeLight(size: 22) 复制代码
3、Resource files
之前 :
let jsonURL = Bundle.main.url(forResource: "seed-data", withExtension: "json") let jsonPath = Bundle.main.path(forResource: "seed-data", ofType: "json") 复制代码
R.swift:
let jsonURL = R.file.seedDataJson() let jsonPath = R.file.seedDataJson.path() 复制代码
4、Localized Strings
之前:
let welcomeMessage = NSLocalizedString("welcome.message", comment: "") let settingsTitle = NSLocalizedString("title", tableName: "Settings", comment: "") let welcomeName = String(format: NSLocalizedString("welcome.withName", comment: ""), locale: NSLocale.current, "Alice") let progress = String(format: NSLocalizedString("copy.progress", comment: ""), locale: NSLocale.current, 4, 23) 复制代码
R.swift:
let welcomeMessage = R.string.localizable.welcomeMessage() let settingsTitle = R.string.settings.title() let welcomeName = R.string.localizable.welcomeWithName("Alice") let progress = R.string.localizable.copyProgress(completed: 4, total: 23) 复制代码
5、Segues
之前:
performSegue(withIdentifier: "openSettings", sender: self) override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let settingsController = segue.destination as? SettingsController, let segue = segue as? CustomSettingsSegue, segue.identifier == "openSettings" { segue.animationType = .LockAnimation settingsController.lockSettings = true } } 复制代码
R.swift:
performSegue(withIdentifier: R.segue.overviewController.openSettings, sender: self) override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let typedInfo = R.segue.overviewController.openSettings(segue: segue) { typedInfo.segue.animationType = .LockAnimation typedInfo.destinationViewController.lockSettings = true } 复制代码
6、Nibs
之前:
let nameOfNib = "CustomView" let customViewNib = UINib(nibName: "CustomView", bundle: nil) let rootViews = customViewNib.instantiate(withOwner: nil, options: nil) let customView = rootViews[0] as? CustomView let viewControllerWithNib = CustomViewController(nibName: "CustomView", bundle: nil) 复制代码
R.swift:
let nameOfNib = R.nib.customView.name let customViewNib = R.nib.customView() let rootViews = R.nib.customView.instantiate(withOwner: nil) let customView = R.nib.customView.firstView(owner: nil) let viewControllerWithNib = CustomViewController(nib: R.nib.customView) 复制代码
7、Reusable table view cells
UITableView
之前:
class FaqAnswerController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() let textCellNib = UINib(nibName: "TextCell", bundle: nil) tableView.register(textCellNib, forCellReuseIdentifier: "TextCellIdentifier") } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let textCell = tableView.dequeueReusableCell(withIdentifier: "TextCellIdentifier", for: indexPath) as! TextCell textCell.mainLabel.text = "Hello World" return textCell } } 复制代码
R.swift:
class FaqAnswerController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() tableView.register(R.nib.textCell) } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let textCell = tableView.dequeueReusableCell(withIdentifier: R.nib.textCell.identifier, for: indexPath)! textCell.mainLabel.text = "Hello World" return textCell } } 复制代码
UICollectionView
之前:
class RecentsController: UICollectionViewController { override func viewDidLoad() { super.viewDidLoad() let talkCellNib = UINib(nibName: "TalkCell", bundle: nil) collectionView?.register(talkCellNib, forCellWithReuseIdentifier: "TalkCellIdentifier") } override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TalkCellIdentifier", for: indexPath) as! TalkCell cell.configureCell("Item \(indexPath.item)") return cell } } 复制代码
R.swift:
class RecentsController: UICollectionViewController { override func viewDidLoad() { super.viewDidLoad() collectionView?.register(R.nib.talkCell) } override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: R.reuseIdentifier.talkCell, for: indexPath)! // 此处跟tableView的使用方式还是有很大区别 cell.configureCell("Item \(indexPath.item)") return cell } } 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- TypeScript 3.0.rc 发布,支持项目引用/组合项目
- TypeScript 3.0 正式发布:引入“项目引用”新概念
- C# 8.0 如何在项目中开启可空引用类型的支持
- 在 Target 中获取项目引用的所有依赖(dll/NuGet/Project)的路径
- c# – 如何让Visual Studio 2015 xproject(project.json)引用依赖项目的最高框架
- 强引用、软引用、弱引用、虚引用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP and MySQL Web Development
Luke Welling、Laura Thomson / Sams / July 25, 2007 / $49.99
Book Description PHP and MySQL Web Development teaches you to develop dynamic, secure, commerical Web sites. Using the same accessible, popular teaching style of the three previous editions, this b......一起来看看 《PHP and MySQL Web Development》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
随机密码生成器
多种字符组合密码