In my iOS Swift app I want to generate random UUID (GUID) strings for use as a table key, and this snippet appears to work:
let uuid = CFUUIDCreateString(nil, CFUUIDCreate(nil))
Is this safe?
Or is there perhaps a better (recommended) approach?
In my iOS Swift app I want to generate random UUID (GUID) strings for use as a table key, and this snippet appears to work:
let uuid = CFUUIDCreateString(nil, CFUUIDCreate(nil))
Is this safe?
Or is there perhaps a better (recommended) approach?
Try this one:
let uuid = NSUUID().uuidString
print(uuid)
Swift 3/4/5
let uuid = UUID().uuidString
print(uuid)
You could also just use the NSUUID API:
let uuid = NSUUID()
If you want to get the string value back out, you can use uuid.UUIDString
.
Note that NSUUID
is available from iOS 6 and up.
For Swift 4;
let uuid = NSUUID().uuidString.lowercased()
For Swift 3, many Foundation
types have dropped the 'NS' prefix, so you'd access it by UUID().uuidString
.
Also you can
use it lowercase
under below
let uuid = NSUUID().UUIDString.lowercaseString
print(uuid)
Output
68b696d7-320b-4402-a412-d9cee10fc6a3
Thank you !
Each time the same will be generated:
if let uuid = UIDevice.current.identifierForVendor?.uuidString {
print(uuid)
}
Each time a new one will be generated:
let uuid = UUID().uuidString
print(uuid)
UUID is a simple structure, which has the property uuidString
.
uuidString
- returns a string created from the UUID, such as “E621E1F8-C36C-495A-93FC-0C247A3E6E5F”.
UUID is guaranteed to be unique.
Swift code:
let identifier = UUID().uuidString
Swift.print(identifier) // Result: "6A967474-8672-4ABC-A57B-52EA809C5E6D"
Apple official documentation about UUID.
Full article https://tonidevblog.com/posts/how-to-generate-a-random-unique-identifier-with-uuid/
Under macOS 13 and Swift 5.7, Foundation's UUID() method does indeed return an upper case UUID, and Vapor Fluent is at least one framework that uses it as is. So, when you create a new record with an id=nil, Fluent will get a new uppercase UUID and store the new record with it. MySQL, on the other hand, generates lowercase UUIDs, and will store the lowercase UUID if you create the record in MySQL. MySQL and SQLite both treat the uppercase and lowercase keys as DIFFERENT. Caveat Emptor.
BUT... if you use the UUID from a previous data read, it shouldn't matter if it was saved with an upper or lower case UUID. You just have to be sure not to change the key's case.