こんにちは、おーしまです。
今回は、swiftでRealmデータベースを用いたアプリ開発ができたので記事にします。
初心者向けなので、まだswiftの経験が浅い人は参考にしてください。
まず、Realmを使う下準備として「cocoapods」をインストールします。
cocoapodsとは、iOSアプリ作成のためのライブラリ管理をしてくれるツールのことで、profileというファイルにライブラリを記述して行けば簡単に管理できるというものです。(railsで言うGemfileのことかな)
と言うことで、
ターミナル
$ sudo gem install cocoapods
$ pod --version #バージョン確認
$ pod setup
次に、xcodeで新規プロジェクトを立ち上げます。
「Create a new Xcode project」
「 iOS 」の 「App」 を選択
ProductNameは、「ToDoListOnRealm」としました。(好きな名前にしてください)
で作成!
ターミナル
$ cd ~/プロジェクト名(ToDoListOnRealm) #プロジェクトのディレクトリに移動
$ pod init
これで、最初に説明した「Profile」というファイルが作られるので、それを編集します。
Profile
# Uncomment the next line to define a global platform for your project # platform :ios, '9.0' target 'ToDoListOnRealm' do use_frameworks! pod 'RealmSwift' # 追加 end
上記のように「pod 'RealmSwift'」を記述します。
そして、
ターミナル
$ pod install
次に、新しくXcodeを開くのですが、
新しくできた「ToDoListOnRealm.xcworkspace」から開きましょう。
(上の画像の一番下のディレクトリのこと)
それでは、「storyboard」から作っていきます。
Main.storybord
TableView、NavigationController、などを導入します。(ごめんなさい、ここは別の記事を見て実装してください)
画面遷移の方法は「プッシュ遷移」と「モーダル遷移」の2つがあり、「プッシュ遷移」は横移動で遷移、「モーダル遷移」は下から次の画面が出てきて遷移します。ですが、「Navigation Controller」を導入しないと、プッシュ遷移ができませんので注意してください。
TableViewの「Identifier」は「cell」とします。
コード
最初にRealmにテーブルを作ります。
新しく、「File」→「New」→「File...」→「Swift File」でテーブルを作るファイル?を作ります。(railsでいうマイグレーションファイルみたいなやつ)
ファイル名はなんでも良いですが、私は「ToDoModel.swift」にしました。
それを以下のように編集します。
import Foundation import RealmSwift class ToDoModel: Object{ @objc dynamic var ToDoName: String? = nil }
「ToDoName」というstring型のカラムを作りました。これにデータを保存していきます。
TableViewを表示する画面を、ViewController.swift
やることリストを追加する画面を、addViewController.swift
と紐づけました。
ViewController.swiftのコード
import UIKit import RealmSwift class ViewController: UIViewController { @IBOutlet weak var todoTable: UITableView! var todoItems: Results<ToDoModel>! override func viewDidLoad() { super.viewDidLoad() // Realmのインスタンスを生成 let realm_1 = try! Realm() // Realmのfunctionでデータを取得。functionを更に追加することで、フィルターもかけられる self.todoItems = realm_1.objects(ToDoModel.self) } // 画面遷移した際に、リロードして全てのリストを表示 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) todoTable.reloadData() } } // Realmから取得したデータをTableViewに並べる extension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.todoItems.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let todoCell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) let item:ToDoModel = self.todoItems[(indexPath as NSIndexPath).row]; todoCell.textLabel?.text = item.ToDoName return todoCell } }
addViewController.swiftのコード
import UIKit import RealmSwift class addViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var todoTextField: UITextField! var todoItems: Results<ToDoModel>! override func viewDidLoad() { super.viewDidLoad() let realm_1 = try! Realm() self.todoItems = realm_1.objects(ToDoModel.self) } // 「追加」ボタンを押された時のアクション @IBAction func addButton(_ sender: Any) { let todoItem:ToDoModel = ToDoModel() todoItem.ToDoName = self.todoTextField.text let realm_2 = try! Realm() try! realm_2.write{ realm_2.add(todoItem) } todoTextField.text = "" } }
以上です。
それでは、また