4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】RealmSwiftを用いたいいね機能の実装

Posted at

はじめに

Realmとは、ローカルにデータを保存しておくことができるデータベースのことです。特に個人開発では、簡単にデータをローカルに保存できるため、多用することが多いと思います。
そこで今回は、realmを用いて、いいね機能を行うために必要なBool型での保存を中心に説明していきたいと思います。

Realmのインストール

Podfileに以下を記述して、pod installを行う。

pod 'RealmSwift'

Realmを使ってメモアプリの実装

スクリーンショット 2021-02-18 22.27.27.png

クラスファイルを作成

新しいファイルを作成し、以下を記入。
新しいファイルの中で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上にボタンを配置していいね機能を実装したり、ブックマーク機能を実装する際の参考にしていただければ幸いです。

4
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?