RealmとSwiftを使用してToDoアプリケーションを作成する

近年のスマートフォンの開発に伴い、開発者の生活を簡素化し、最大限のパフォーマンスと品質を提供する多くのツールが開発されました。 今日App Storeで主導権を握ることは簡単なことではありません。 また、アプリケーションをさらにスケーリングするように指導します。 何百万人ものユーザーがアプリケーションを使用する場合、アプリケーションを監視し、必要に応じてすべての操作を即座に実行する必要があります。 したがって、多くの開発者が直面する問題の1つはデータベースです。 それは本当に私たち一人一人に大きな頭痛の種を引き起こします。そして今日、SQLiteとCore Dataの2つの選択肢しかないと思います。 私はCore Dataの大ファンであり、レコードと永続データを操作する能力がありましたが、アプリケーションを開発する際に彼と協力するのに多くの時間を費やしていることに気付きました。 最近、SQLiteとCore Dataの新しい最高の代替品であるRealmに出会いました。

レルムと迅速

レルムとは何ですか?


Realmは、iOS(SwiftおよびObjective-Cで利用可能)およびAndroid用のクロスプラットフォームモバイルデータベースです。 レルムは、SQLiteおよびCore Dataよりも高速で高速に作成されました。 優れているだけでなく、使いやすいだけでなく、わずか数行のコードで多くのことができます。 レルムは完全に無料であり、制限なしで使用できます。 レルムはモバイルアプリケーション用に作成されました。これは過去10年間でモバイルデータベースの革新に気付いていないため、これは新しいものです。 現在、モバイルデータベースを操作するには、SQLiteまたはSQLiteを使用するラッパーの1つのオプションしかありません。 レルムはORMではないため、使いやすいように設計されており、独自の永続化メカニズムを使用してパフォーマンスと速度を向上させています。

なぜレルムなのか?


Realmは信じられないほど高速で使いやすく、データベースへの読み取りまたは書き込みにかかわらず、タスクを完了するのに必要なのは数行のコードだけです。 ここでは、モバイルアプリケーションでデータベースを操作する際にRealmを使用するのが最良の選択であるすべての利点と理由を収集します。



さあ始めましょう


レルムを始めましょう。それを使用して、Swiftを使用して簡単なiPhoneアプリケーションを作成します。 デモプロジェクトは、単純なTodoアプリケーションになります。 ユーザーはタスクをタスクリストに追加できます。各リストには複数のタスクを含めることができます。 タスクには、完了、またはその逆を示すタイトル、メモ、日付、画像、ブール値があります。 Xcodeでプロジェクトの作業を開始する前に。 最初にXcodeを設定し、Realmで作業するために必要なツールをインストールする必要があります。

必要条件


次の要件を考慮してください。


Xcodeと必要なツールを構成する


Xcodeでプロジェクトを設定する前に、XcodeプロジェクトにRealmをインストールするために使用するため、コンピューターにCocoaPodsがインストールされていることを確認してください。 CocoaPodsに慣れていない場合は、いくつかのオンラインガイドを読み、開始するための詳細を学んでください。

次に、「シングルビューアプリケーション」テンプレートを使用してXcodeで新しいプロジェクトを作成し、「RealmTasks」などの名前を付けます。 開発言語としてSwiftが選択されていることを確認してください。 次に、ターミナルのプロジェクトディレクトリに移動し、次のコマンドを実行してCocoaPodsを初期化します。
pod init 

次に、Xcodeプログラムによって生成されたポッドファイルを開いて編集し、ターゲット直後にポッド「RealmSwift」を追加します。したがって、次のようになります。

ポッドRealmSwift

次に、「pod install」コマンドを実行して、レルムをプロジェクトにロードします。 完了すると、プロジェクトファイルの横にXcode用の新しいワークスペースが作成されます。 xcodeprojを開く必要がなくなったRealmTasks.xcworkspaceワークスペースを開いてください。 ワークスペースを開くと、次のようなものが表示されます。

ワークスペース

XcodeはRealmと連携する準備ができましたが、Realmとの連携をさらに簡素化するには、さらにいくつかのツールをインストールする必要があります。

Xcode用のRealmプラグインのインストール


Realmチームは、Realmモデルの作成に使用できる非常に便利なXcodeプラグインを提供しています。 プラグインをインストールするには、 Alcatrazを使用します。 アルカトラズが何であるかを知らない人にとって、これはプラグイン、Xcodeのテンプレートを自動的にインストールするための非常にシンプルで便利なオープンソースパッケージマネージャーです。 Alcatrazをインストールするには、ターミナルに次のコマンドを貼り付けてからXcodeを再起動します。
 curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/master/Scripts/install.sh | sh 

次に、Xcodeで、[ウィンドウ]を選択し、次の画像のように[パッケージマネージャー]を選択します。

パッケージマネージャー

次に、ポップアップウィンドウが開き、Xcode用にインストールするプラグインまたはテンプレートを選択し、検索バーでプラグインまたはテンプレートを検索してXcodeを構成できます。 検索バーに「Realm」と入力すると、「RealmPlugin」プラグインが表示され、[ インストール ] クリックします

RealmPlugin

レルムブラウザ


最後に言及したいツールは、Realmブラウザです。 このブラウザは、.realmデータベースファイルの読み取りと編集に役立ちます。 これらのファイルは、データベーステーブル内のエンティティ、属性、およびレコードに関するすべての情報とともにアプリケーションで作成されます。 これらのファイルは、iOSやAndroidなどの異なるプラットフォーム間で共有できると既に述べています。 スコープブラウザツールをダウンロードするには、iTunesストアにアクセスして最新バージョンをダウンロードしてください。 アプリケーションを開き、[ツール]-> [デモデータベースの生成]を選択します。 これにより、テストレルムデータベースファイルが作成され、ブラウザを使用してその内容を開いて表示できます。 デモデータベースを開くと、次のようになります。

レルムブラウザ

RealmTestClass1クラスでわかるように、1000のレコードがあり、このクラスのさまざまなタイプのパラメーター(列)を示しています。 次のセクションで、サポートプロパティのタイプについて説明します。

これで、Realmを使用する準備が整いました。 始めましょう。

データベースのモデルクラス


これでゲームが始まりました! 最初に、モデルクラスまたはデータベースを作成します。 Realmでモデルクラスを作成するには、オブジェクトのクラスを拡張する通常のSwiftクラスを作成するだけです。 オブジェクトは、レルムモデルのすべてのクラスの基本クラスと考えてください。最後にオブジェクトを拡張するクラスを拡張することもできます。 クラスを作成したら、プロパティが必要になります。 レルムは、次のようなさまざまなタイプのプロパティをサポートしています。
 – Int, Int8, Int16, Int32, and Int64 – Boolean – Float – String – NSDateNSData – Class  Object -    '  ' – List <Object> -    '  ' 

リストには、Realmクラスのように、オブジェクトインスタンスのコレクションが含まれます。デモデータベースのスクリーンショットを参照してください。最後の列は、別のテーブルの既存のレコードへのポインターの配列にすぎません。 Realmクラスを使用する場合、他のSwiftクラスと同様に、Realmクラスに対処できることを知っておく必要があります。 たとえば、メソッドやプロトコルを追加して、他のSwiftクラスと同様に使用できます。

チャット-バッグを投げないで、コードを見せてください!

では、XcodeにインストールしたRealmプラグインを使用して、Realmクラスを作成しましょう。 Xcodeに移動して、新しいファイルを作成します。 右側のサイドバーで、[レルム]を選択します。

レルムモデル

次に、「Swift」を選択し、クラス名に「タスク」と入力します。 次のようなものが表示されます。

タスクの迅速化

Taskクラスは、新しいプロパティを追加する準備ができました。

プロパティ


もちろん、Taskクラスにプロパティを追加する必要があります。 タスクには、名前(String)、createdAt(NSDate)、notes(String)、isCompleted(Bool)があります。 プロパティを追加すると、クラスは次のようになります。
 class Task: Object { dynamic var name = "" dynamic var createdAt = NSDate() dynamic var notes = "" dynamic var isCompleted = false // Specify properties to ignore (Realm won't persist these) // override static func ignoredProperties() -> [String] { // return [] // } } 

Taskクラスのプロパティを追加し、すべてのプロパティにvarプレフィックスを追加しました。

次に、タスクを保存するために使用されるTaskListクラスを作成しましょう。
 class TaskList: Object { dynamic var name = "" dynamic var createdAt = NSDate() let tasks = List<Task>() // Specify properties to ignore (Realm won't persist these) // override static func ignoredProperties() -> [String] { // return [] // } } 

TaskListクラスには、createdAtとList-タスクのリストという名前があります。 ここにコメントがあります:


Realmでのリレーションシップの作成は、1対多リレーションシップの以前の実装で見たように非常に簡単です。 また、リストではなく1対1の関係について述べたように、オブジェクトタイプを使用します。 次の例を考えてみましょう。
 class Person: Object{ dynamic var name = "" } class Car: Object{ dynamic var owner:Person? } 

前の例では、所有者プロパティはPersonデータモデルとの1対1の関係として機能します。

コアクラスが作成されたので、単純なToDoアプリケーションを作成して、Realmについて引き続き説明します。 最初アプリケーションをダウンロードして視聴します。 Xcode 7(またはそれ以上)で実行すると、次のように表示されます。

レルム-todo-list-app

プロジェクトでは、TasksViewControllerとTaskListViewControllerの2つのView Controllerを追加しました。 最初のコントローラーはタスク項目を表示するために使用され、2番目のコントローラーは使用可能なすべてのタスクを表示するために使用されます。 リストビューで[+]ボタンをクリックして、タスクのリストを追加します。 タスクリストの選択は、次の画面に続きます。 そこで、いくつかのタスクを追加できます。

デモアプリケーションの主なアイデアで、新しいタスクリストをRealmデータベースに追加する方法を見てみましょう。 これを行うには、いくつかの要素を処理する必要があります。



オブジェクトをレルムに保存するには、オブジェクトのモデルをサブクラス化してから、オブジェクトをレルムに書き込むだけです。 必要なコードスニペットの例を次に示します。
 let taskListA = TaskList() taskListA.name = "Wishlist" let wish1 = Task() wish1.name = "iPhone6s" wish1.notes = "64 GB, Gold" let wish2 = Task(value: ["name": "Game Console", "notes": "Playstation 4, 1 TB"]) let wish3 = Task(value: ["Car", NSDate(), "Auto R8", false]) taskListA.tasks.appendContentsOf([wish1, wish2, wish3]) 

TaskListクラスのインスタンスを作成してタスクリストを作成し、そのプロパティを設定します。 次に、Taskタイプの3つのオブジェクト(wish1、wish2、およびwish3)を作成します。 ここでは、レルムオブジェクトを作成する3つの方法を示しました。

  1. wish1オブジェクトで:Realmクラスを作成し、プロパティを設定するだけです。
  2. wish2:オブジェクトでは、キー(プロパティ名)と値を使用してプロパティを辞書に渡すことができます。
  3. wish3:オブジェクトでは、配列を使用してプロパティを渡すことができます。 配列の値は、クラスモデル宣言の対応するプロパティと同じ順序でなければなりません。


ネストされたオブジェクト


Realmでオブジェクトを作成するときのもう1つの機能は、ネストされたオブジェクトです。 この関数は、1対1または1対多の関係がある場合に使用できます。つまり、ObjectまたはList <Object>タイプのプロパティがあることを意味します。 この場合、アプローチ2または3を使用すると、オブジェクトを、そのプロパティを表す配列または辞書に置き換えることができます。 ネストされたオブジェクトの例を次に示します。
 let taskListB = TaskList(value: ["MoviesList", NSDate(), [["The Martian", NSDate(), "", false], ["The Maze Runner", NSDate(), "", true]]]) 

上記のコードでは、フィルムのリストを作成し、名前、createAt、およびタスクの配列を設定します。 各タスクは、プロパティの配列を使用して作成されます。 たとえば、[“ The Maze Runner”、NSDate()、“”、trueに設定]は、名前、createAt、notes、およびブール変数isCompletedを持つタスクを表します。

レルムにオブジェクトを保存する


ここで、Realmオブジェクトを作成し、いつでもそれらを使用する方法を知る必要があります;それらを書き込みトランザクションでRealmデータベースに保存する必要があります。 Realmにデータを保存すると、Realmに保存されている間、任意のストリームでこれらのオブジェクトにアクセスできます。 書き込みトランザクションを完了するには、レルムオブジェクトが必要です。 レルムインスタンス(スコープとも呼ばれる)は、レルムデータベースを表します。 次のようにインスタンスを作成できます。
 let uiRealm = try! Realm() 

AppDelegate.swiftの先頭にこの行を追加して、すべてのSwiftファイルでオブジェクトを共有するために使用します。 後で、次のような書き込みメソッドを簡単に呼び出すことができます。
 uiRealm.write { () -> Void in uiRealm.add([taskListA, taskListB]) } 

最初に、uiRealmオブジェクトがAppDelegateクラスで作成され、アプリケーションによって共有されます。 レルムオブジェクトは、スレッドセーフではなく、スレッド間で共有できないため、一度だけ作成する必要があります。 別のスレッドで書き込み操作を実行する場合は、新しいレルムオブジェクトを作成する必要があります。 このインスタンスはUIスレッドに固有であるため、「uiRealm」と名付けました。

アプリケーションに戻りましょう。ユーザーが[作成]ボタンをクリックした後、タスクリストを保存します。 TasksViewControllerのdisplayAlertToAddTaskメソッドには、createActionオブジェクトがあります。
 let createAction = UIAlertAction(title: doneTitle, style: UIAlertActionStyle.Default) { (action) -> Void in let taskName = alertController.textFields?.first?.text if updatedTask != nil{ // update mode uiRealm.write({ () -> Void in updatedTask.name = taskName! self.readTasksAndUpateUI() }) } else{ let newTask = Task() newTask.name = taskName! uiRealm.write({ () -> Void in self.selectedList.tasks.append(newTask) self.readTasksAndUpateUI() }) } } 

上記のコードでは、テキストボックスからタスク名を取得し、Realm writeメソッドを呼び出してタスクリストを保存します。

複数のレコードが同時に実行される場合、それらは互いにブロックし、それらが実行されたスレッドをブロックすることに注意してください。 したがって、UIスレッドではなく、別のスレッドでの実行を検討する必要があります。 もう1つの機能は、トランザクションの書き込み中に読み取りがブロックされないことです。 これは、アプリケーションが多くの読み取り操作を実行できるため便利です。

オブジェクトの取得


Realmにデータを書き込む方法を学習したので、データを取得する方法がわからなくても無駄です。 Realmデータベースのクエリは非常に簡単です。 データを設定およびフィルタリングするための多くのオプションが提供されます。 Realmでクエリを実行すると、Resultsオブジェクトのリストが返されます。 インターフェイスは配列に非常に似ているため、ResultsをSwift配列と考えてください。

Resultsのインスタンスがある場合、ディスクから直接データを取得します。 データの変更(トランザクション内)は、ディスク上のデータの変更につながります。 Realmでは、オブジェクトをリクエストするには、クラス名をパラメーターとしてオブジェクトメソッドを呼び出すだけです。 それを使用してTaskListを読み取り、UIを更新する方法を見てみましょう。

TasksListsViewControllerでこのプロパティを定義しました。
 var lists : Results<TaskList>! 

そして、次のようにreadTasksAndUpdateUIメソッドを実装します。
 func readTasksAndUpdateUI() { lists = uiRealm.objects(TaskList) self.taskListsTableView.setEditing(false, animated: true) self.taskListsTableView.reloadData() } 

また、tableViewメソッド(_:cellForRowAtIndexPath:_)では、名前のリストとこのリスト内のタスクの数を表示します。
 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let cell = tableView.dequeueReusableCellWithIdentifier("listCell") let list = lists[indexPath.row] cell?.textLabel?.text = list.name cell?.detailTextLabel?.text = "\(list.tasks.count) Tasks" return cell! } 

かなり簡単ですね。 最後に行うことは、viewWillAppearメソッドのreadTasksAndUpdateUI関数を呼び出して、ビューが開かれたときに常に更新されるようにすることです。
 override func viewWillAppear(animated: Bool) { readTasksAndUpdateUI() } 

これが、レルムを使用してタスクリストを読み書きする方法です。 次に、レルムで更新または削除操作を実行する方法を学習します。 始める前に、リストから操作を編集/削除するためのプロジェクトテンプレートのコードスニペットを見てみましょう。

まず、isEditingModeと呼ばれるTaskListsViewControllerにブール値があります。これは、編集モードと通常モードを切り替えるために使用されます。
 var isEditingMode = false 

[編集]ボタンをクリックすると、didClickOnEditButtonメソッドが呼び出されます。
 @IBAction func didClickOnEditButton(sender: UIBarButtonItem) { isEditingMode = !isEditingMode self.taskListsTableView.setEditing(isEditingMode, animated: true) } 

このアクションは、UITableViewのsetEditingメソッドを使用して、UITableViewの編集モードを有効/無効にします。 UITableViewでは、セルの編集モードの標準アクションにより「削除」アクションが表示されますが、iOS 8.0以降では、ユーザーが指でスワイプしたときにセルに表示されるアクションを構成するために、editActionsForRowAtIndexPathという新しいメソッドがUITableViewDelegateに追加されました。

このメソッドを実装して、次のように削除と編集の2つのアクションを追加します。
 func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { let deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.Destructive, title: "Delete") { (deleteAction, indexPath) -> Void in //Deletion will go here let listToBeDeleted = self.lists[indexPath.row] uiRealm.write({ () -> Void in uiRealm.delete(listToBeDeleted) self.readTasksAndUpdateUI() }) } let editAction = UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "Edit") { (editAction, indexPath) -> Void in // Editing will go here let listToBeUpdated = self.lists[indexPath.row] self.displayAlertToAddTaskList(listToBeUpdated) } return [deleteAction, editAction] } 

ここでは、UITableViewRowActionアクションを使用する2つの方法を追加しました。これは、アクションのスタイル、名前、およびハンドラーを使用してアクションを処理します。 現在、セル上で指をスライドさせるか、編集モードで破壊的なボタンをクリックすると、アクションは次のようになります。

編集モード

これは、アンインストールと更新のアプリケーションインターフェイスの外観です。

オブジェクトを削除する


Realmデータベースからオブジェクトとデータを削除するには、Realmオブジェクトのdeleteメソッドを呼び出して、削除するオブジェクトを渡すだけです。 そしてもちろん、これは書き込みトランザクションで行う必要があります。 データベースからタスクリストを削除する方法を示す次のコードを見てください。
 let listToBeDeleted = self.lists[indexPath.row] uiRealm.write({ () -> Void in uiRealm.delete(listToBeDeleted) self.readTasksAndUpdateUI() }) 

削除後、新しいデータを取得してUIを更新するためにreadTasksAndUpdateUI関数を呼び出しました。

1つのオブジェクトを削除する代わりに、deleteAllと呼ばれる別の関数があります。この関数を使用すると、データベース内のすべてのクラスのすべてのデータを削除できます。 この方法は、現在のユーザーのデータを保存し、ログアウト時にデータベースをクリアする場合に非常に便利です。
 uiRealm.write({ () -> Void in uiRealm.deleteAll() }) 

オブジェクトの更新


Realmにはオブジェクトを更新する多くの方法がありますが、それらはすべて書き込みトランザクション内で実行する必要があります。 以下では、オブジェクトを更新するためのいくつかのアプローチを見ていきます。

プロパティを使用する


記録ブロック内の新しい値を持つ一連のプロパティを使用して、Realmオブジェクトを更新できます。 たとえば、TasksViewControllerでは、プロパティを設定してタスクの状態を変更するだけです。
 uiRealm.write({ () -> Void in task.isCompleted = true }) 

主キーを使用する


レルムは、オブジェクトの単一行またはintプロパティを主キーとしてマークすることをサポートしています。 add()関数を使用してRealmオブジェクトを作成するときに、キーが既に存在する場合、オブジェクトは新しい値で更新されます。

以下に例を示します。
 let user = User() user.firstName = "John" user.lastName = "Smith" user.email = "example@example.com" user.id = 1 // Updating User with id = 1 realm.write { realm.add(user, update: true) } 

識別子は主キーとして設定されます。 id 1のユーザーが存在する場合、Realmはそれに応じてオブジェクトを更新します。 それ以外の場合、Realmはオブジェクトをデータベースに挿入します。

KVC(キー値コーディング)の使用


経験豊富なiOS開発者であれば、キーと値のコーディングに精通している必要があります。 オブジェクト、結果、リストなどのレルムクラスはKVC互換です。 これは、ランタイムでプロパティを設定/更新するのに役立ちます。 リストと結果でのKVCマッチングのもう1つの興味深い機能は、各オブジェクトを反復処理して更新することなく、コレクションオブジェクト全体を更新できることです。 あなたはこれを完全に理解できないことを知っています。 この例を見てみましょう:
 let tasks = uiRealm.objects(Task) uiRealm.write { () -> Void in tasks.setValue(true, forKeyPath: "isCompleted") } 

上記のコードでは、すべてのTaskオブジェクトを取得するリクエストを作成し、返されたすべてのオブジェクトに対してisCompletedをtrueに設定しました。 つまり、データベース内のすべてのタスクを1行のコードで完了済みとしてマークしました。

ToDoアプリに戻りましょう。 displayAlertToAddTaskListメソッドをもう一度見ると、次のコードフラグメントが見つかります。
 // update mode uiRealm.write({ () -> Void in updatedList.name = listName! self.readTasksAndUpdateUI() }) 

ユーザーが名前のリストを編集するときに実行されます。 nameプロパティを設定して、名前のリストを更新するだけです。

タスクマッピング


TaskListViewControllerのほとんどのコードを紹介しました。 次に、タスクリストにタスクアイテムを表示するために使用されるTasksViewControllerを見てみましょう。 コントローラーにはUITableViewがあり、これは2つのセクションに分かれています:完了したタスクと開いているタスクです。 TasksViewControllerには、次のプロパティがあります。
 var selectedList : TaskList! var openTasks : Results<Task>! var completedTasks : Results<Task>! 

selectedListは、TaskListsViewControllerに渡される選択されたタスクリストを格納するために使用されます。 開いている状態または完了した状態でタスクをフィルタリングするには、openTasksとcompletedTaskの2つの変数を宣言します。 フィルタリングには、Realmで魔法の関数フィルター()を使用します。 フィルタリングの仕組みを説明する前に、コードでどのように見えるかを見てみましょう。
 func readTasksAndUpateUI(){ completedTasks = self.selectedList.tasks.filter("isCompleted = true") openTasks = self.selectedList.tasks.filter("isCompleted = false") self.tasksTableView.reloadData() } 

このメソッドでは、filterメソッドを呼び出して結果をフィルタリングします。 レルムでは、 filter()メソッドを使用してリクエストを簡単にフィルタリングできます。 メソッドは、リスト、結果、およびオブジェクトのインスタンスによって呼び出すことができます。 フィルタ文字列で指定された条件に基づいて特定のオブジェクトを返します。フィルタはNSPredicateと考えることができます。一般的に、これらは完全に同一であると言えます。述語文字列でNSPredicateを作成し、それを渡して、完了したタスクをフィルタリングするかのようにメソッドをフィルタリングできます。

別の例を見てみましょう。
 // using predicate string var redCars = realm.objects(Car).filter("color = 'red' AND name BEGINSWITH 'BMW'") // using NSPredicate let aPredicate = NSPredicate(format: "color = %@ AND name BEGINSWITH %@", "red", "BMW") redCars = realm.objects(Car).filter(aPredicate) 

上記のコードでは、これらの車を赤でフィルター処理し、名前が「BMW」で始まっています。コードの最初の行は、単にフィルタリング文字列を使用してフィルタリングを実行します。または、NSPredicateを使用して同じ結果を得ることができます。最も一般的なフィルター比較演算子を簡単に説明する表を次に示します。

realm-database-info

仕分け


Realmデータベースの基本的な操作について説明したので、このチュートリアルの最後までに紹介したい別の機能があります。ソートは、Realmが提供するもう1つの便利な機能です。リストと結果では、sortメソッドを呼び出してデータコレクションをソートできます。リスト内のタスクをアルファベット順または作成日で並べ替える方法を見てみましょう。まず、UIで、選択に基づいてリストを並べ替えるセグメントコントロールを追加

Screen

します。選択ベースの並べ替えを実行するには、ロジックを次のように実装します。
 @IBAction func didSelectSortCriteria(sender: UISegmentedControl) { if sender.selectedSegmentIndex == 0{ // AZ self.lists = self.lists.sorted("name") } else{ // date self.lists = self.lists.sorted("createdAt", ascending:false) } self.taskListsTableView.reloadData() } 

おわりに


Realmは、データとデータベースのローカルストレージを管理するための非常に軽量でシンプルなソリューションです。レルムを使用すると、ほんの数行のコードを記述するだけで、作業を拡大および簡素化できます。ほとんどのアプリケーションやゲームでさえ、このデータベースを使用する必要があると思うので、機会を与えてください。

次は?


このガイドの助けを借りて、プロジェクトでRealmを使用し、読み取り書き込み更新削除などのすべての基本操作を実行できますレルムには、まだ慣れておく必要がある追加のトピックがいくつかあります。私がお勧めできる最高のリンクは、Realmの公式Webサイトです。これらの人たちは、すべてを文書化する素晴らしい仕事をしました。

Todoアプリの完全なソースコードはこちらにあります

Source: https://habr.com/ru/post/J272393/


All Articles