【iOS】今年使ってみて良かったライブラリ4選


こんにちは、マネーフォワードでiOSエンジニアとして働いている杉本です。
私の方からは今年試してみて便利だったライブラリを紹介しようと思います。

RealmSwift

RealmSwiftとは

1つ目は今年話題になったRealmSwiftというライブラリです。
RealmSwiftはRealmをSwiftから使うためのライブラリで、Coredataに近い存在です。

RealmとはSQLiteを置き換えると言われているモバイルDBです。
去年に出たばかりなのですが、リリース9ヶ月で世界2位のモバイルDBにまで成長したという期待のライブラリです。

realm/realm-cocoa

RealmSwiftの長所

RealmSwiftですが、Coredataと比べるとテーブル定義とても簡単です。

CoredataではxcdatamodelファイルにModel定義をした上でそれに対応するクラスを作る必要があったのですが、Swiftではクラス定義するだけでModel定義が完了します。

xcdatamodelで良くあったNotNull入れ忘れなどもなくなりそうで有り難いです。

Coredataでのクラス定義

Swiftでのクラス定義

import RealmSwift

class User: Object {
    dynamic var id = 0
    dynamic var name = ""

    override static func primaryKey() -> String? {
        return "id"
    }
}

それとマイグレーションがとてもお手軽です。
Coredataでは、xcdatamodelの新しいバージョンを作成・対応するクラスの修正・旧バージョンと新バージョンの紐付けファイルを作る必要がありました。
Realmでは対応するクラスの修正と下のようなマイグレーション設定を記述するだけで済みます。

let config = Realm.Configuration(
    schemaVersion: 1,
    migrationBlock: { migration, oldSchemaVersion in
        if (oldSchemaVersion < 1) {}
})
Realm.Configuration.defaultConfiguration = config

詳しい使い方はこちらにもまとめたので宜しければ合わせて御覧ください。

RealmSwiftを試したけどもうCoreDataは使わなくなるかもしれない
Realm Swiftのマイグレーションを試してみた

LKUserDefaults

これはUserDefaultsにプロパティー形式でアクセスできるライブラリです。
下のようにget/setができます。

print(UserDefaults.sharedInstance().hoge) // getter
UserDefaults.sharedInstance().hoge = "hoge" // setter

しかしプロパティーの定義はObjective-cでしかできないという点がネックです。
Objective-cは人によっては嫌だったりするのでチームで使うのは少しためらっています。

プロパティー定義は下の通りです。

@interface UserDefaults : LKUserDefaults

@property(nonatomic, nonnull) NSString *hoge;

@end

デフォルト値を持たせたい場合は実装ファイルに下のような記述をします。

@implementation MyUserDefaults

- (void)registerDefaults {
    self.hoge = @"defaultValue";
}

@end

SwiftDate

NSDateを拡張してくれるライブラリです。
SwiftのNSDateってmonthを取るだけでNSDateComponentsのインスタンス生成が必要だったり、Stringにしたい時はNSDateFormatterを使ったりと色々めんどくさいです。
SwiftDateはNSDateを拡張してその辺を使いやすくしてくれます。

年/月/日などの取得を直感的にできるようになります。

import SwiftDate

NSDate().year
NSDate().month
NSDate().day

"YYYY/MM/dd"形式での出力も1行でできます。

NSDate().toString(format: .Custom("YYYY/MM/dd"))

1日後のNSDateや3時間前のNSDateも簡単に取れます。
個人的に一番気に入っている機能です。

import SwiftDate

NSDate() + 1.day
NSDate() - 3.hours

R.swift

StoryboardやSegue等を変数として取得できるライブラリです。
非常に気に入っているライブラリで、今年は周囲に布教していました。

Storyboardは下のように置き換えてくれます。
嬉しいことにMyViewControllerへのキャストもしてくれます。

let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? MyViewController
// ↓ のように書ける
let viewController = R.storyboard.main.initialViewController

segueは下のように書けます。

performSegueWithIdentifier("OpenSettings")
// ↓ のように書ける
performSegueWithIdentifier(R.segue.viewController.openSettings.identifier)

prepareForSegueでも変数を使えるようになるのが嬉しいです。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
//     if segue.identifier == "OpenSettings" {
    // ↓ のように書ける
    if segue.identifier == R.segue.viewController.openSettings.identifier {
        // ...
    }
}    

他にも Nib/Reuse Identifier/UIImage/Font などを変数として扱えます。
下の記事でも詳しい使い方を書いたので宜しければご参照下さい。

R.swiftを使ってStoryboard名や画像名のTypoを0にする

参考URL

BuzzFeedやチャットワークも導入、1億台のデバイスで動作するモバイルDB「Realm」がシリーズBで2000万ドルを調達