R.swift 讓iOS項目像Android R 一樣管理資源 - 輕鬆解決國際化

##什麼是 R.Swift

搞過的Android開發同學都知道,在Android開發中,其對於資源的引用非常方便,我們可以通過"R機制"來對Android中的圖片(Drawable)、佈局(Layout)、動畫配置(Anim)、國際化字符串(String)、尺寸(Dimen)等等資源進行非常方便快捷的引用。

開媽搞iOS的時候,我瞬間覺得iOS的資源引用略爲噁心,跟Android比起來,它更加蛋疼麻煩。

R.Swift是一款基於Swift平臺,針對iOS以及TVOS開發的仿Android資源引用框架。它所針對的問題,就是類似於剛剛我在上方提到的一樣,避免使用字符串來構造某些資源實例。R.Swift能夠在我們修改項目資源後動態地進行配置,最終,你能夠使用類似語法R.資源類型.資源名稱來對某資源進行引用構建。R.Swift有着動態生成代碼的機制,由此,它具有以下極具魅力的優點:

  1. 代碼自動補全 :就像輸入其他的代碼一樣,R.Swift支持IDE的代碼自動補全,當你的資源量非常龐大時,你只需把資源調用語法的前沿部分敲出來,IDE就會自動給予代碼提示以及補全,這對資源的引用效率有着顯著的提高。

  2. 自動檢測 : 當我們寫入某些錯誤的代碼時,IDE會向我們反饋錯誤以及警告,如我們調用某個類中不存在的方法時,IDE就會立即檢測出代碼的錯誤,並給予反饋。在R.Swift中,若我們將資源重命名,或乾脆將資源刪除了,R.Swift會自動重新進行配置,而在之前我們對該資源進行引用的地方,IDE也會相應的向我們報錯,表明資源的不存在,如此一來,我們就不必擔心資源的修改刪除對代碼的蝴蝶效應了。

R.Swift的安裝配置

傳送門: https://github.com/mac-cain13/R.swift

在這裏我們使用的是CocoaPods來對R.Swift進行安裝,相關的步驟也不必累贅說明,一句pod install後我們把R.Swift安裝進來了。

  pod 'R.swift'

進入終端執行:

    pod install

下面要進行R.Swift的配置,主要有幾個步驟:

  1. 進入項目的配置界面,在左邊的TARGETS項下面選擇我們的項目,並在右邊點擊Build Phases這個tab。
  2. 進入Build Phases這個tab後,我們看到左上角有一個"+"按鈕,點擊並在彈出的選項卡中選擇New Run Script Phase。
  3. 我們會看到界面的下方多出了一個Run Script項,展開它,並在腳本輸入區域輸入"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/R.generated.swift" (第二對雙引號括起來所代碼的是項目的根目錄,你也可以放到根目錄下的其他目錄中,只需將其修改爲"$SRCROOT/XXX",XXX爲目標目錄名)。這裏把生成的 R.generated.swift 放在了工程的main路徑下

在這裏插入圖片描述

  1. 添加 $TEMP_DIR/rswift-lastrun to the “Input Files” and $SRCROOT/R.generated.swift to the “Output Files” of the Build Phase
  2. 我們按住新建的這個Run Script項向上移動,移到Compile Source項的上方,不過也要保證此時它也在Check Pods Manifest.lock項的下方。
  3. Command + B,編譯一下,編譯成功後,在Finder進入到剛剛我們制定的目錄中,此時我們會看到一個名爲R.generated.swift的文件已經創建了,直接把此文件拖入Xcode項目中,記住不要勾選Copy items if needed項。

配置到此完成,我們可以構建自己的項目了

##R.Swift的使用

在這裏要說明一下,每當我們修改了資源,我們需要Command + B來編譯一下項目從而讓R.Swift自動進行配置更新。

下面就來用實例演示一下R.Swift的使用,並與原生的API進行比對:

Image - 圖片

//  不使用R.Swift
let pImage = UIImage(named: "image_test")
//  使用R.Swift
let nImage = R.image.image_test()
File - 數據文件

//  不使用R.Swift
let pFile = NSBundle.mainBundle().pathForResource("DataFile", ofType: "json")
//  使用R.Swift
let nFile = R.file.dataFileJson.path()

Font - 字體

//  不使用R.Swift
let pFont = UIFont(name: "chalkduster", size: 35)
//  使用R.Swift
let nFont = R.font.chalkduster(size: 35)
//  你看,非常神奇,在上面的方法中你不僅可以選擇字體類型,還能設置字體大小

Nib

//  不使用R.Swift
tableView.registerNib(UINib(nibName: "TanTableViewCell", bundle: nil), forCellReuseIdentifier: CELL_IDENTIFIER)
//  使用R.Swift
tableView.registerNib(R.nib.tanTableViewCell(), forCellReuseIdentifier: CELL_IDENTIFIER)

###Color - 顏色

顏色這裏我覺得有必要細講一下,一個較爲龐大的項目,其顏色資源配置也是相應比較複雜,如某些視圖的背景顏色、字體的顏色等等,以往我們進行顏色資源的配置,一般會定義一個全局的Config文件或類,裏面就存有各種顏色,每種顏色用有意義的名稱去標識。R.Swift與其不同的是,它還能有更讚的方式導入顏色資源: Color Palette

呵呵,這個方式可以說是非常的花式,配合R.Swift使用起來簡直6得飛起!
當我們在可視化視圖編輯界面(如Storyboard)中爲一個視圖配置某些顏色時,我們可以進入顏色調色板來選擇更多的顏色,如圖:

新建一個調色板
在這裏插入圖片描述

找到該調色板文件

/Library/Colors

將該調色板文件複製到項目,並確保其中資源編譯列表中

// 當調色板文件名爲app.clr
let clr = R.color.app.base()

參考文章

http://www.jianshu.com/p/10461449bb77
https://github.com/mac-cain13/R.swift
https://blog.csdn.net/mazy_ma/article/details/73024576

Swift-顏色設置技巧和(.clr)文件的創建和使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章