R.swift可以很方便的管理IOS各种资源,有点类似Android中的R类….
先来看看效果图:
库的首页: https://github.com/mac-cain13/R.swift
安装方法: http://www.jianshu.com/p/0c97ef3cdc38
安装需要2点:
1:需要运行一段脚本"$PODS_ROOT/R.swift/rswift" "$SRCROOT"
2:脚本生成的文件R.generated.swift
,需要复制到项目中,这样才能愉快的使用R.swift
使用的时候,不需要import…就可以直接使用R.image.xx方式;
当你创建了新的资源,你需要重复第2步.
相关用法:https://github.com/mac-cain13/R.swift/blob/master/Documentation/Examples.md#examples
Images
R.swift will find both images from Asset Catalogs and image files in your bundle.
Vanilla
let settingsIcon = UIImage(named: "settings-icon")
let gradientBackground = UIImage(named: "gradient.jpg")
With R.swift
let settingsIcon = R.image.settingsIcon()
let gradientBackground = R.image.gradientJpg()
Custom fonts
Vanilla
let lightFontTitle = UIFont(name: "Acme-Light",size: 22)
With R.swift
let lightFontTitle = R.font.acmeLight(size: 22)
Resource files
Vanilla
let jsonURL = NSBundle.mainBundle().URLForResource("seed-data",withExtension: "json")
let jsonPath = NSBundle.mainBundle().pathForResource("seed-data",withExtension: "json")
With R.swift
let jsonURL = R.file.seedDataJson()
let jsonPath = R.file.seedDataJson.path()
Colors
Vanilla
label.backgroundColor = UIColor(red: 0.9,green: 0.9,blue: 0.9,alpha: 0.5)
label.textColor = UIColor(red: 0.3,green: 0.3,blue: 0.3,alpha: 1.0)
With R.swift
// Colors are extracted from the *.clr files that are in your Xcode project
label.backgroundColor = R.color.appColors.backgroundColor()
label.textColor = R.color.appColors.textColor()
There are some points to keep in mind when using Color palettes,see About Colors
Localized strings
Vanilla
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.currentLocale(),"Alice")
// Stringsdict files
let progress = String(format: NSLocalizedString("copy.progress",4,23)
With 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: 4,total: 23)
Storyboards
Vanilla
let storyboard = UIStoryboard(name: "Main",bundle: nil)
let initialTabBarController = storyboard.instantiateInitialViewController() as? UITabBarController
let settingsController = self.instantiateViewControllerWithIdentifier("settingsController") as? SettingsController
With R.swift
let storyboard = R.storyboard.main()
let initialTabBarController = R.storyboard.main.initialViewController()
let settingsController = R.storyboard.main.settingsController()
Segues
Vanilla
// Trigger segue with:
performSegueWithIdentifier("openSettings",sender: self)
// And then prepare it:
override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) {
if let settingsController = segue.destinationViewController as? SettingsController,segue = segue as? CustomSettingsSegue
where segue.identifier == "openSettings" {
segue.animationType = .LockAnimation
settingsController.lockSettings = true
}
}
With R.swift
// Trigger segue with:
performSegueWithIdentifier(R.segue.overviewController.openSettings,sender: self)
// And then prepare it:
override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) {
if let typedInfo = R.segue.overviewController.openSettings(segue: segue) {
typedInfo.segue.animationType = .LockAnimation
typedInfo.destinationViewController.lockSettings = true
}
}
Tip: Take a look at the SegueManager library,it makes segues block based and is compatible with R.swift.
Nibs
Vanilla
let nameOfNib = "CustomView"
let customViewNib = UINib(nibName: "CustomView",bundle: nil)
let rootViews = customViewNib.instantiateWithOwner(nil,options: nil)
let customView = rootViews[0] as? CustomView
let viewControllerWithNib = CustomViewController(nibName: "CustomView",bundle: nil)
With R.swift
let nameOfNib = R.nib.customView.name
let customViewNib = R.nib.customView()
let rootViews = R.nib.customView.instantiateWithOwner(nil)
let customView = R.nib.customView.firstView(owner: nil)
let viewControllerWithNib = CustomViewController(nib: R.nib.customView)
Reusable table view cells
Vanilla
class FaqAnswerController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
let textCellNib = UINib(nibName: "TextCell",bundle: nil)
tableView.registerNib(textCellNib,forCellReuseIdentifier: "TextCellIdentifier")
}
override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let textCell = tableView.dequeueReusableCellWithIdentifier("TextCellIdentifier",forIndexPath: indexPath) as! TextCell
textCell.mainLabel.text = "Hello World"
return textCell
}
}
With R.swift
class FaqAnswerController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.registerNib(R.nib.textCell)
}
override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let textCell = tableView.dequeueReusableCellWithIdentifier(R.nib.textCell.identifier,forIndexPath: indexPath)!
textCell.mainLabel.text = "Hello World"
return textCell
}
}
Reusable collection view cells
Vanilla
class RecentsController: UICollectionViewController {
override func viewDidLoad() {
super.viewDidLoad()
let talkCellNib = UINib(nibName: "TalkCell",bundle: nil)
collectionView?.registerNib(talkCellNib,forCellWithReuseIdentifier: "TalkCellIdentifier")
}
override func collectionView(collectionView: UICollectionView,cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("TalkCellIdentifier",forIndexPath: indexPath) as! TalkCell
cell.configureCell("Item \(indexPath.item)")
return cell
}
}
With R.swift
class RecentsController: UICollectionViewController {
override func viewDidLoad() {
super.viewDidLoad()
collectionView?.registerNib(R.nib.talkCell)
}
override func collectionView(collectionView: UICollectionView,cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(R.reuseIdentifier.talkCell,forIndexPath: indexPath)!
cell.configureCell("Item \(indexPath.item)")
return cell
}
}
至此: 文章就结束了,如有疑问: QQ群 Android:274306954 Swift:399799363 欢迎您的加入.