Генерация UUID на iOS из Swift

В моем приложении iOS Swift я хочу создать случайные строки UUID (GUID) для использования в качестве ключа таблицы, и этот фрагмент кода работает:

let uuid = CFUUIDCreateString(nil, CFUUIDCreate(nil))

Это безопасно?

Или, может быть, есть лучший (рекомендуемый) подход?

8 ответов

Решение

Попробуй это:

let uuid = NSUUID().uuidString
print(uuid)

Свифт 3

let uuid = UUID().uuidString
print(uuid)

Вы также можете просто использовать NSUUID API:

let uuid = NSUUID()

Если вы хотите получить строковое значение обратно, вы можете использовать uuid.UUIDString,

Обратите внимание, что NSUUID доступно с iOS 6 и выше.

Для Swift 4;

let uuid = NSUUID().uuidString.lowercased()

Для Swift 3 много Foundation типы удалили префикс "NS", поэтому вы можете получить к нему доступ UUID().uuidString,

Вас также can используй это lowercase нижеследующее

let uuid = NSUUID().UUIDString.lowercaseString
print(uuid)

Выход

68b696d7-320b-4402-A412-d9cee10fc6a3

Спасибо!

Каждый раз будет генерироваться одно и то же:

if let uuid = UIDevice.current.identifierForVendor?.uuidString {
    print(uuid)
}

Каждый раз будет генерироваться новый:

let uuid = UUID().uuidString
print(uuid)

UUID - это простая структура, обладающая свойством. uuidString - возвращает строку, созданную на основе UUID, например «E621E1F8-C36C-495A-93FC-0C247A3E6E5F».

UUID гарантированно уникален .

Код Swift:

      let identifier = UUID().uuidString
Swift.print(identifier) // Result: "6A967474-8672-4ABC-A57B-52EA809C5E6D"

Официальная документация Apple по UUID .
Полная статья https://tonidevblog.com/posts/how-to-generate-a-random-unique-identifier-with-uuid/

В macOS 13 и Swift 5.7 метод Foundation UUID() действительно возвращает UUID в верхнем регистре, а Vapor Fluent — это по крайней мере один фреймворк, который использует его как есть. Итак, когда вы создаете новую запись с id=nil, Fluent получит новый UUID в верхнем регистре и сохранит с ним новую запись. MySQL, с другой стороны, генерирует UUID нижнего регистра и будет хранить UUID нижнего регистра, если вы создадите запись в MySQL. MySQL и SQLite обрабатывают ключи верхнего и нижнего регистра как РАЗНЫЕ. Пусть покупатель будет бдителен.

НО... если вы используете UUID из предыдущего чтения данных, не имеет значения, был ли он сохранен с UUID верхнего или нижнего регистра. Вы просто должны быть уверены, что не изменили корпус ключа.

Другие вопросы по тегам