こんにちは、マネーフォワードでiOSエンジニアとして働いている杉本です。
私の方からは今年試してみて便利だったライブラリを紹介しようと思います。
RealmSwift
RealmSwiftとは
1つ目は今年話題になったRealmSwiftというライブラリです。
RealmSwiftはRealmをSwiftから使うためのライブラリで、Coredataに近い存在です。
RealmとはSQLiteを置き換えると言われているモバイルDBです。
去年に出たばかりなのですが、リリース9ヶ月で世界2位のモバイルDBにまで成長したという期待のライブラリです。
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万ドルを調達