はじめに
Realmとは、ローカルにデータを保存しておくことができるデータベースのことです。特に個人開発では、簡単にデータをローカルに保存できるため、多用することが多いと思います。
そこで今回は、realmを用いて、いいね機能を行うために必要なBool型での保存を中心に説明していきたいと思います。
Realmのインストール
Podfileに以下を記述して、pod installを行う。
pod 'RealmSwift'
Realmを使ってメモアプリの実装
クラスファイルを作成
新しいファイルを作成し、以下を記入。
新しいファイルの中でDiaryというクラスを作成する。ObjectというのはRealmが用意しているもので、これを書くことによってクラスをRealmに保存することができる。
また、Realmのクラスでは、変数を定義する前に@objc dynamicと記述しなければいけない。
import Foundation
import RealmSwift
class Diary: Object {
@objc dynamic var date = "" //日付を格納する変数
@objc dynamic var content = "" //メモ内容を格納する変数
@objc dynamic var isLikeOnRealm = false //いいねをおしたかどうか判定する変数
}
Realmにデータを保存する
@IBAction func add()は、Saveボタンの処理であり、textFieldに記入された文字をRelmに保存する。
また、@IBAction func Like()はLIKEボタンを押した時の処理で、RealmのisLikeOnRealmにtrueを保存する。
import UIKit
import RealmSwift
class AddViewController: UIViewController {
@IBOutlet var dateTextField: UITextField!
@IBOutlet var contentTextField: UITextField!
@IBOutlet var button: UIButton!
var realm: Realm!
let diary = Diary()
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
button.layer.cornerRadius = 15
realm = try! Realm()
diary.isLikeOnRealm = false
print(diary.isLikeOnRealm)
}
@IBAction func Like() {
diary.isLikeOnRealm = true
}
@IBAction func add() {
//Diaryクラスのインスタンスを作成
//nilであれば、Undefiedを代入
diary.date = dateTextField.text ?? "Undefined"
diary.content = contentTextField.text ?? "Undefined"
try! realm.write {
realm.add(diary)
}
self.navigationController?.popViewController(animated: true)
}
}
Realmに保存されているデータを取得
LIKEが押されていた際に、星マークがつく処理を記述しました。
import UIKit
import RealmSwift
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet var table: UITableView!
var realm:Realm!
var diaries:Results<Diary>!
override func viewDidLoad() {
super.viewDidLoad()
table.delegate = self
table.dataSource = self
realm = try! Realm()
diaries = realm.objects(Diary.self)
table.reloadData()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
diaries = realm.objects(Diary.self)
print(diaries.last?.isLikeOnRealm)
table.reloadData()
}
@IBAction func saveButton() {
performSegue(withIdentifier: "toSave", sender: nil)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return diaries.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let isLike = diaries[indexPath.row].isLikeOnRealm
var like: String = ""
if isLike {
like = "★"
print(indexPath.row)
}
cell.textLabel?.text = like + diaries[indexPath.row].content + " - " + diaries[indexPath.row].date
return cell
}
}
#おわりに
今回ざっといいねを実装するためのベースの考え方を紹介しました。
TableViewCell上にボタンを配置していいね機能を実装したり、ブックマーク機能を実装する際の参考にしていただければ幸いです。