【Swift】RealmでObjectIdクラスの使い方!一意のID生成とString型変換

この記事からわかること

  • Realm Swift一意ID生成する方法
  • ObjectIdクラス使い方
  • String型と相互に型変換(キャスト)するには?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

参考文献: ObjectId Class Reference

モバイル向けのデータベースを提供しているRealm Swiftの中でObjectIdクラスの使い方をまとめていきます。

ObjectIdクラスとは

public final class ObjectId: RLMObjectId, Decodable, @unchecked  Sendable

ObjectIdクラスは12バイトの一意の英数字の羅列を自動で生成するクラスです。完全にランダムなわけではなく、生成された識別子にソートをかけると生成された順番に整列されるように割り振られます。

Foundationフレームワークに定義済みのUUID構造体と基本的な役割は同じです。

おすすめ記事:UUIDとは?

一意のidを生成する方法

ObjectIdクラスを使用して一意のIDを生成するにはテーブルクラスの定義の際に、ObjectIdにします。初期期を格納しなくてもインスタンス生成時に自動で生成してくれるので気にする必要はありません。

class User: Object {
    @Persisted(primaryKey: true) var id: ObjectId
    @Persisted  var name:String = ""
    @Persisted  var age:Int = 0
}
Results<User> <0x12d605990> (
	[0] User {
		id = 6332fc79008dcaf2c0135526;
		name = ame;
		age = 230;
	},
	[1] User {
		id = 6332ff27131e9c4275156b67;
		name = ame;
		age = 230;
	}
)

インスタンスを普通に作成する

クラスのプロパティとしてではなく、普通にインスタンス化した際に一意のIDを生成するにはgenerateメソッドもしくはinit(timestamp:machineId:processId:)を使用します。

let objectId = ObjectId.generate()
print(objectId)  // 647446c4ada430885455c5cf

let objectId2 = ObjectId(timestamp: Date(), machineId: 0, processId: 0)
print(objectId2) // 647446c4010000000055c5ce

timestampには適当なData型をmachineIdprocessIdにはInt型で数値を渡すことで生成されるIDが変化します。

シンプルなイニシャライザ(init())を使用してインスタンス化しても一意のIDは生成されないので注意してください。

let objectId = ObjectId()
print(objectId)  // 000000000000000000000000

String(文字列)型を取得する

ObjectId型ではなく、String(文字列)型として取得したい場合はstringValueプロパティを使用します。

let objectId = ObjectId.generate()
let objectIdString = objectId.stringValue

String(文字列)型をObjectId型にキャストする

public override required init(string: String) throws

String(文字列)型からObjectId型にキャストしたい場合はObjectId(string:)形式のイニシャライザを使用します。throwsがついているのでtryを使用します。

let objectIdString = "6332ff27131e9c4275156b67"
let objectId = try? ObjectId(string: objectIdString)

失敗する場合は文字列が24文字でない場合または「0-9a-fA-F」以外の文字が含まれている場合です。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index