【Xcode/Swift】Storyboardや画像などリソースファイルにすぐアクセスできるライブラリ「R.swift」の使い方を解説

この記事では、「R.swift」というライブラリの使い方について解説していきたいと思います。

R.swiftとは?

R.swiftというライブラリは、Storyboardや画像などのリソースファイルにすぐアクセスできるライブラリです。

例えば、R.swiftを使わないで異なる画面にコードで遷移しようとしたら、以下のように記載します。

@IBAction func tappedButton(_ sender: Any) {
    let storyboard = UIStoryboard(name: "Next", bundle: nil)
    let nextVC = storyboard.instantiateViewController(withIdentifier: "Next") as! NextViewController
    self.present(nextVC, animated: true)
}

Storyboardの情報を取得して、その中のボードも取得してからやらないといけません。

ですが、R.swiftを使えば以下のように簡潔に書くことができます。しかも、"Next"などの文字列を使っていないので、スペルミスも防ぐことができます。

@IBAction func buttonAction(_ sender: Any) {
    if let nextVC = R.storyboard.next.instantiateInitialViewController() {
        self.present(nextVC, animated: true)
    }
}

というように、R.swiftは効率よくスペルミスも防いでくれる使いこなせば実装が楽になるライブラリです。

使い方

使うためには少しScriptを用意したりなどやや面倒ですが、この設定ができたらかなり楽になります。

ライブラリ導入

まずは、以下のcocoapodsでライブラリを導入してください。

pod 'R.swift'

cocoapodsのやり方がわからない方は以下の記事を確認してください。

【Xcode/Swift】CocoaPodsの使い方を徹底解説

スクリプト追加

ビルドしたときに、R.generated.swiftを生成するスクリプトを作ります。

STEP.1

①プロジェクトを選択
②TARGETSを選択
③Build Phases
④+ボタンをクリック
⑤New Run Script Phase

STEP.2

①Run Scriptを開く
②以下のコードをコピペ

"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/R.generated.swift"
STEP.3

①+ボタン
②以下のコードをコピペ

$TEMP_DIR/rswift-lastrun
STEP.4

①+ボタンをクリック
②以下のコードをコピペ

$SRCROOT/R.generated.swift
STEP.5

command + bでビルドしましょう。

Build SucceededでたらOKです。

ファイルをプロジェクトに追加

STEP.1

①プロジェクトを右クリック
②Show in Finderをクリック

Finderが開きます。R.generated.swiftというファイルがあればOKです。

STEP.2

R.generated.swiftをプロジェクトフォルダにドラッグ&ドロップ

STEP.3

①DestinationのCopy items if neededのチェックを外す
②Create folder referencesを選択
③Finishをクリック

これでファイルの追加ができました。

R.swiftを使って異なるStoryboradに画面遷移実装

では、R.swiftを使って異なるStoryboardに画面遷移させてみましょう。

STEP.1

まずは、Next.storyboardを作ります。

command + nで新規ファイルを追加ウィンドを開いてください。

①Storyboardを選択
②Nextをクリック

STEP.2

①Next.storyboardと入力
②Createをクリック

STEP.3

①Next.storyboardを選択
②画面を選択
Show (Show the Attributes inspector)をクリック
④BackgrouondをSystem Yellow Colorに変更

STEP.4

①バーをクリック
Show (Show thie Attributes inspector)をクリック
③Is Initial View Controllerにチェック

STEP.5

NextViewController.swiftを作りましょう。

command + nで新規ファイルを追加ウィンドを開いてください。

①Cocoa Touch Classを選択
②Nextをクリック

STEP.6

①Subclass of:をUIViewControllerに変更
②ClassにNextViewControllerと入力
③Nextをクリック

STEP.7

Createをクリック

STEP.8

①Next.storyboardを選択
②ボードのバーの左のアイコンをクリック
Show (Show the identifier inspector)を選択
④ClassにNextViewControllerを選択
⑤Storyboard IDにNextと記載
⑥Use Storyboard IDにチェック

STEP.9

command + bを押してください。

STEP.10

①Main.storyboardを選択
②左上の+ボタンをクリック
③Buttonをドラッグ&ドロップ

STEP.11

command + option + control + Enterを押して二分割(できない場合はoptionを押しながらViewController.swiftを選択)

STEP.12

controlを押しながらドラッグ&ドロップ

NameにtappedButtonと入力し、Connectをクリック

STEP.13

ViewController.swiftに以下のように記載

import UIKit
import Rswift

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func tappedButton(_ sender: Any) {
        if let nextVC = R.storyboard.next.instantiateInitialViewController() {
            self.present(nextVC, animated: true)
        }
    }
}

これで、ボタンを押したら異なるStoryboardにたった3行で画面遷移できるようになってるかと思います!

まとめ

このライブラリは、行数を減らすというだけではなく、StoryboradのID違いのコーディングミスや、アプリのクラッシュを防げるので、Storyboardを使った個人開発ではマストで入れておきたいライブラリだと思います!