プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

SwiftのデータベースRealmでデータを登録する。

この記事は2019年01月15日に投稿しました。

f:id:paveway:20190914064630j:plain

目次

  1. はじめに
  2. SwiftのデータベースRealmでデータを登録する
  3. おわりに

詳解 Swift 第4版

詳解 Swift 第4版

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
PWEditorで使用しているSwiftのデータベースRealmでデータを登録する方法についてです。

目次へ

2. SwiftのデータベースRealmでデータを登録する

SwfitのデータベースRealmでデータを登録するには、Realmクラスのaddメソッドを使用します。
またaddメソッドはトランザクション内で実行する必要があります。
トランザクションはRealmクラスのwriteメソッドを使用します。

addメソッド

書式
public func add(_ object: Object, update: Bool = false)
引数

object
登録するデータのモデルクラス

update

データを登録または更新するか指定します。
trueの場合、更新されます。
(更新については後日別の方法で紹介します)
falseの場合、登録されます。

writeメソッド

書式
public func write(_ block: (() throws -> Void)) throws
引数

blcok
トランザクション内で行うデータベース操作

実装例

// モデルクラス
import RealmSwift

class PersonalInfo: Object {

    // ID
    @objc dynamic var id = 0 // プライマリーキー項目(項目名は任意です)
    
    // 名前
    @objc dynamic var name = ""
    
    // 年齢
    @objc dynamic var age = 0
    
    // 住所
    @objc dynamic var address = ""
    
    // Eメールアドレス
    @objc dynamic var email = ""

    /**
     プライマリキーのプロパティ名を返却します。
     
     - Returns: プライマリキーのプロパティ名
     */
    override static func primaryKey() -> String? {
        return "id"
    }
}
// 登録
let realm: Realm
do {
    realm = try Realm()
    realm.write() {
        // トランザクションを開始します。

        // 登録済みのデータを、プライマリキー"id"の降順で検索します。
        let results = realm.objects(PersonalInfo.self).sorted(byKeyPath: "id", ascending: false)
        
        // 登録件数を取得します。
        let count = result.count
        
        // プライマリキーのIDが重複しないように設定します。
        let id: Int
        if (count == 0) {
            // 登録データが0件の場合
            id = 0

        } else {
            // 登録データがある場合
            // IDは既存のID+1とします。
            // データを削除している場合、"id"が歯抜けの可能性がありますが、
            // 今回は考慮しません。
            id = results.id + 1
        }
        
        // PersonalInfoモデルを生成し、各プロパティを設定します。
        let personalInfo = PersonalInfo()
        personalInfo.id = id
        personalInfo.name = "yamada"
        personalInfo.age = 21
        personalInfo.address = "tokyo"
        personalInfo.email = "yamada@gmail.com"
        
        // PersonalInfoをデータベースに登録します。
        realm.add(personalInfO)
    }
} catch {
    // 必要に応じて、エラー処理を行います。
}

目次へ

3. おわりに

最初トランザクションの存在を忘れていて、データ登録できませんでした。

トランザクションは

でも組めるようですが、こちらの方法はうまくいきませんでした。
(今も動作しないかは確認していないので、わかりません)

未経験のITエンジニア転職なら【TECH::EXPERT】

たった2日でマスターできるiPhoneアプリ開発集中講座 Xcode 10 Swift 4.2対応

たった2日でマスターできるiPhoneアプリ開発集中講座 Xcode 10 Swift 4.2対応

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。

目次へ


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688

目次へ