最近使っているR.swiftという便利ライブラリについてまとめてみます。
このライブラリですが、Storyboard名や画像名をプロパティーとして取得できるようになるのでTypoする事がなくなります!
おまけにコードも短くなるので非常にオススメです。
R.swiftでできること
Storyboard
下のようにプロパティーを使って取得できるようになります。
MyViewController
へのキャストも自動で行ってくれます。
let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? MyViewController
// ↓ のように書ける
let viewController = R.storyboard.main.initialViewController
Nib
Nibも同様です。
let view = UINib(nibName: "MyNib", bundle: nil).instantiateWithOwner(nil, options: nil).first as? MyView
// ↓ のように書ける
let view = R.nib.myNib.firstView(nil, options: nil)
Reuse Identifier
TableViewCellのReuseIdentifierもプロパティー化してくれます。
MyCell
へのキャストも勝手に行ってくれます。
let cell = UITableView().dequeueReusableCellWithIdentifier("CellIdentifier") as? MyCell
// ↓ のように書ける
let cell = tableView.dequeueReusableCellWithIdentifier(R.reuseIdentifier.cellIdentifier)
UIImage
UIImageも同様です。
Assets.xcassets
に入っている画像もそれ以外の画像も全てプロパティー化します。
let image = UIImage(named: "MyImage")
// ↓ のように書ける
let image = R.image.myImage
Segue
performSegueWithIdentifier("OpenSettings")
// ↓ のように書ける
performSegueWithIdentifier(R.segue.viewController.openSettings.identifier)
SegueはprepareForSegue
で参照する機会が多いのでありがたいです。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == R.segue.viewController.openSettings.identifier {
}
}
その他
試していないのですが、カスタムフォントやリソースファイル(JSONファイル等)もプロパティーとして取得できるようです。
Rという構造体
Rという構造体はR.generated.swiftファイルに入っていて、中身は下のようになっています。
R.generated.swiftは下記のようなRun Scriptを使ってコンパイル時に生成しています。
インストール方法
- CocoaPodsでR.swiftを追加
- Run Scriptを追加して"$PODS_ROOT/R.swift/rswift" "$SRCROOT"と記述
- R.swift4以降を使っている場合は、「"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT" 」のようにgenerateコマンドを追加して下さい。
- コンパイルするとR.generated.swiftというファイルが生成されるので、それをプロジェクトに追加
こちらのビデオが非常に分かりやすいので宜しければご参考にして下さい。