こんにちは!今回は、誰しも欲しいと思うであろう、IDをランダムで作成してくれる関数『UUID』について簡単に解説したいと思います!
(※UUIDには今回解説する、「uuidString」以外にもいくつかプロパティがありますが、こちらの記事では「uuidString」のみ解説します。)
目次
- UUIDについての概要
- UUIDの使用例とID作成の応用
- さいごに
UUIDについての概要
まずは、いつも通りAppleの公式ドキュメントを確認してみましょう!
UUID
A universally unique value to identify types, interfaces, and other items.
「特定できるような普遍的で単一の値」
https://developer.apple.com/documentation/foundation/uuid/
今回も、直訳だと分かりづらいですね。(笑)要するに、一意な値を作ったりできるとのことですね!(実際には一意ではない)
具体的な使用例としては、ユーザーを識別するために使用したり、画像をサーバーに保存する際等にファイル名としてランダムな文字列を取得するなどが挙げられます!
僕自身は、Firebase Storageに画像を保存する際に、UUIDを使用してファイル名を作成しています!!
具体的な記述法については下のコード例で解説します!
皆さんもどのような使用方法があるか教えていただけるとありがたいです!
UUIDの使用例とID作成の応用
ここからは具体的な使用方を解説したいと思います!
ランダムの文字列を取得するには、UUIDのプロパティの1つである「var uuidString: String」を使用します。
var uuidString: String
“E621E1F8-C36C-495A-93FC-0C247A3E6E5F”のように、UUIDから生成された文字列を返します。
https://developer.apple.com/documentation/foundation/uuid/
具体的には、上記のようにハイフンも加えた文字列を返してくれるみたいですね!
以下では具体的な記述方法を3つ解説します!
// ① シンプルな使用方法
let id = UUID().uuidString
print(id)
--------------
デバック
3D66E481-3655-430E-9C4C-60B5951C0130
// ② 僕がファイル名を作成する際に使用している方法
let id = UUID().uuidString + ".jpeg"
print(id)
--------------
デバック
7B5D95DD-8BA8-4CB9-A233-B448C37DC6AC.jpeg
// ③ UUID().uuidStringから文字列を生成したタイミングをidに付け加えて、
// より一意に近づける使用方法
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .medium
formatter.locale = Locale(identifier: "ja_JP")
let registerTime = Date()
// 以下文法的に汚い書き方になっていますが、今回はとりあえず出力することが目的なので
// 汚いコードであること、ご容赦ください。
var registerTimeOriginalString = formatter.string(from: registerTime)
var replacedSpaceWithHyphens = registerTimeOriginalString.replacingOccurrences(of: " ", with: "-")
var replacedCommasWithHyphens = replacedSpaceWithHyphens.replacingOccurrences(of: ":", with: "-")
var replacedSlashWithHyphens = replacedCommasWithHyphens.replacingOccurrences(of: "/", with: "-")
print(replacedSlashWithHyphens + UUID().uuidString)
--------------
デバック
// 年・月・日・時間・分・秒とUUID().uuidStringから作成された文字列のid
2023-02-14-20-39-21F4611474-4792-43DD-BDF4-F638B726B6DE
とてつもなく汚いコードになっていますが、③を使用することで限りなく一意になると考えられるので、一意でなければならない理由があるのであればここまでするべきかもしれませんね!
しかし、UUID().uuidStringで出力される文字列の組み合わせが重複する確率は宝くじが当たる確率よりもはるかに低いらしいので、シンプルにUUID()uuidStringで出力された文字列のみを使用しても重複する心配はなさそうですね!
他にも、UIDeviceにも端末ごとに同じ文字列を出力してくれる関数があるみたいですが、それはまた後日解説したいと思います!
さいごに
いかがでしたか?僕は個人開発でFirebaseのFirestorageを使用しており、画像を保存する際の名前をこUUIDを活用して作成しています!!とりあえずこのUUIDを使用していますが、途中で解説したようにIDを発行した日付や他にもユーザーIDも紐づけることでより一意のIDに近いものを作成できると思うので、一意でなくてもいいけど限りなく他と被る確率の低いIDを作成して利用したいという場合は、ぜひUUIDを使用してみてください!