Swift-->R.swift带你体验Android中R类的便利

R.swift可以很方便的管理IOS各种资源, 有点类似Android中的R类….
先来看看效果图:
Swift-->R.swift带你体验Android中R类的便利_第1张图片
库的首页: 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", comment: ""), locale: NSLocale.currentLocale(), 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 欢迎您的加入.

你可能感兴趣的:(Swift)