【Swift】UUIDで重複しない固有IDを作る

どうも、ねこきち(@nekokichi1_yos2)です。

 

データベースにデータを保存する場合、

「どうやってユーザーとデータを紐付けるか」

の問題が発生します。

 

当然、ユーザー別に固有のID(データの羅列)が必要ですので、

  • 乱数

が思いつきます。

 

しかし、乱数は生成する度に別の文字列を生成するので、デバイス側で生成した乱数を保持しなくてはなりません。

 

もしデータ照合用に乱数をUserDefaultに保存しても、アプリを削除すれば、UserDefaultも削除されてしまいます。

 

そこで、UUID - ユニークID、の登場です。

 

 

UUIDとは?

 

一言で言うと、重複しない固有のID、です。

参考:https://wa3.i-3-i.info/word13163.html

 

例えば、IDやパスワードを設定する時、

  • 名前
  • 誕生日
  • キーワード

などの自分だけが知る要素を組み合わせます。

 

なぜなら、”自分だけ”の要素なので、他ユーザーと差別化でき、重複しづらくなるからです。

 

かといって、乱数ならまだしも、無限に近いパターンを生み出す法則や算出方法がない限り、99%重複しないIDを作るのは困難です。

 

しかし、UUIDは予め重複しないIDを生成されるよう設計されてるので、手軽に固有のIDを作れちゃいます。

(確率的にUUIDが重複する確率はほぼ0なので、心配する必要なし。)

 参考:

 

また、UUIDを利用することで

  • バイス別にUUIDが決まっている
  • UUIDの生成コードで呼び出すだけ
  • 変数などで保持しなくても良い

の利点を活かせます。

 

なので、

  • どうやってIDを生成するか
  • どこにIDを保持しておくか

を考える必要がなくなり、データ紐付けの実装が楽になります。

 

UUIDの生成方法

 

let uuid = UIDevice.current.identifierForVendor!.uuidString
print(uuid)

 

回数やアプリの初起動に関わらず、常にUUIDは同じです。 

 

 シミュレータでもUUIDが生成されます。

↓ 

iPhone 8

f:id:nekokichi_yos2:20200426181222p:plain

 

iPhone 8 Plus

f:id:nekokichi_yos2:20200426181235p:plain

 

iPhone 11

f:id:nekokichi_yos2:20200426181251p:plain