##什麼是 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
有着動態生成代碼的機制,由此,它具有以下極具魅力的優點:
-
代碼自動補全 :就像輸入其他的代碼一樣,R.Swift支持IDE的代碼自動補全,當你的資源量非常龐大時,你只需把資源調用語法的前沿部分敲出來,IDE就會自動給予代碼提示以及補全,這對資源的引用效率有着顯著的提高。
-
自動檢測 : 當我們寫入某些錯誤的代碼時,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的配置,主要有幾個步驟:
- 進入項目的配置界面,在左邊的TARGETS項下面選擇我們的項目,並在右邊點擊Build Phases這個tab。
- 進入Build Phases這個tab後,我們看到左上角有一個"+"按鈕,點擊並在彈出的選項卡中選擇New Run Script Phase。
- 我們會看到界面的下方多出了一個Run Script項,展開它,並在腳本輸入區域輸入
"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/R.generated.swift"
(第二對雙引號括起來所代碼的是項目的根目錄,你也可以放到根目錄下的其他目錄中,只需將其修改爲"$SRCROOT/XXX",XXX爲目標目錄名)
。這裏把生成的R.generated.swift
放在了工程的main
路徑下
- 添加 $TEMP_DIR/rswift-lastrun to the “Input Files” and $SRCROOT/R.generated.swift to the “Output Files” of the Build Phase
- 我們按住新建的這個Run Script項向上移動,移到Compile Source項的上方,不過也要保證此時它也在Check Pods Manifest.lock項的下方。
- 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