見出し画像

Swiftで行こう!--Realm!(データ保存、読み出し)

テーブル操作してデータを保存したり、取り出したり、消去したりしました。NSCodingを使って保存しました。Swift、XcodeにはCoreDataと呼ばれるデータベースが用意されていますが、少し取扱が煩雑らしいです。まだじっくり使ったことないですが。

そこで割と簡単に実装が可能と言われている"Realm"を導入から行って使って見たいと思います。

まず導入ですが、CocoaPodsを使う方法とFramewokを取り込む方法がありますが今回は

で紹介されている方法で入れていきます。

あとは実際に使っていくだけです。

import RealmSwift

と宣言して書き始めます。では画面作っていきます。

こんな感じで何か文字書いて、ラベルにその文字を表示してボタンを押したら保存するようにしたいと思います。

新規ファイルswiftファイルを作ります。

import UIKit
import RealmSwift

class Obj: Object{
   
   @objc dynamic var name: String?

}

と書きます。nameという名前の変数を作ります。ここにラベルに表示する文字を入れます。

 @IBAction func saveButton(_ sender: UIButton) {
       let obj = Obj()
       obj.name = textField.text
       label.text = obj.name
       
       let realm = try! Realm()
       
     try! realm.write {
           realm.add(obj)
       }
 }

これで保存されるはずです。

あとは再度起動したときに保存したものを表示さしてみます。

 override func viewDidLoad() {
       super.viewDidLoad()
       
       let realm = try! Realm()
       let obj = realm.objects(Obj.self)

       for objData in obj{
           label.text = objData.name
       }
    
   }
let realm = try! Realm()
let obj = realm.objects(Obj.self)

これで読み込み準備です。変数"obj"に保存したものを入れて、

for objData in obj{
label.text = objData.name
}

for inループでデータを取り出します。これでデータを取り出し、ラベルにデータが反映されます。

全体のコードです。

import UIKit
import RealmSwift
class ViewController: UIViewController,UITextFieldDelegate{
   
   @IBOutlet weak var label: UILabel!
   @IBOutlet weak var textField: UITextField!
   
   
   override func viewDidLoad() {
       super.viewDidLoad()
       
       let realm = try! Realm()
       let obj = realm.objects(Obj.self)
       
       for objData in obj{
           label.text = objData.name
       }
            
       textField.delegate = self
   }
   
   func textFieldShouldReturn(_ textField: UITextField) -> Bool {
       
       label.text = textField.text   
       textField.resignFirstResponder()
      
       return true
   }
  
   @IBAction func saveButton(_ sender: UIButton) {
       let obj = Obj()
       obj.name = textField.text
       label.text = obj.name
       
       let realm = try! Realm()
       try! realm.write {
           realm.add(obj)
       }
   }
}

いいなと思ったら応援しよう!