1. 程式人生 > >Swift-使用 R.swift 優雅的使用資原始檔

Swift-使用 R.swift 優雅的使用資原始檔

R.swift 讓 Swift 更方便快捷安全的使用資原始檔, 一旦學會使用, 我保證你會愛上它

R.swift 特點:

  • 每當專案build時,R.swift開始執行
  • 這個檔案根據專案裡的資原始檔自動在 R.generated.swift 檔案中按照型別生成結構體
  • 強型別,無需型別判斷和轉換,自動返回對應型別
  • 支援多種資源型別
  • 自動完成,無需猜測影象名稱,避免資源名稱拼寫錯誤

安裝

  1. 新增 pod 'R.swift' 到你的 Podfile 檔案中, 然後執行 pod install

  2. 在專案中: 點選專案名稱, 選擇 TARGETS, 點選 Build Phases

    ,在點選左上角 + 號新增 New Run Script Phase
    這裡寫圖片描述

  3. 開啟並複製下面 "$PODS_ROOT/R.swift/rswift" generate "$SRCROOT"到黑色輸入框中

  4. 拖動這個指令碼在 Check Pods Manifest.lock 之下

這裡寫圖片描述
4. Build 專案, 在 $SRCROOT-folder目錄下找到 R.generated.swift 檔案 , 拖拽 R.generated.swift 檔案到專案中,並不勾選 Copy items if needed
這裡寫圖片描述

R.swift 的具體使用

一、圖片-Images

原始用法

let
settingsIcon = UIImage(named: "settings-icon")

使用 R.swift

let settingsIcon = R.image.settingsIcon()

二、字型-Fonts

原始用法

let lightFontTitle = UIFont(name: "Acme-Light", size: 22)

使用 R.swift

let settingsIcon = R.image.settingsIcon()

三、檔案-Files

原始用法

let plistURL = Bundle.main.url(for
Resource: "book", withExtension: "plist") let jsonPath = Bundle.main.path(forResource: "data", ofType: "json")

使用 R.swift

let plistURL = R.file.bookPlist()
let jsonPath = R.file.DataJson.path()

四、顏色-Colors

R.swift 對於顏色是通過(.clr)檔案獲取顏色
(.clr)檔案具體詳情請看上篇部落格(Swift-顏色設定技巧和(.clr)檔案的建立和使用
R.swift 通過 R.color.xxx 使用顏色

原始用法

label.textColor = UIColor(red: 0.3, green: 0.3, blue: 0.3, alpha: 1.0)

使用 R.swift

Colors are extracted from the *.clr files that are in your Xcode project

label.textColor = R.color.appColors.textColor()

五、故事版-Storyboards

原始用法

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarController = storyboard.instantiateInitialViewController() as? UITabBarController
let settingsController = storyboard.instantiateViewController(withIdentifier: "settingsController") as? SettingsController

使用 R.swift

let storyboard = R.storyboard.main()
let tabBarController = R.storyboard.main.initialViewController()
let settingsController = R.storyboard.main.settingsController()

六、Segues

原始用法

performSegue(withIdentifier: "openSettings", sender: self)

使用 R.swift

performSegue(withIdentifier: R.segue.overviewController.openSettings, sender: self)

七、Nibs

原始用法

let nib = UINib(nibName: "ToolBar", bundle: nil)
let toolBar = nib.instantiate(withOwner: nil, options: nil).first as? ToolBar

使用 R.swift

let toolBar  = R.nib.toolBar.firstView(owner: self)
let toolBar2 = R.nib.toolBar.secondView(owner: self)

八、Reusable identifier / table view cells

原始用法

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
  }
}