Как сгенерировать UUID (GUID) в Swift для iOS?
Использование встроенного типа UUID в Foundation
В современном Swift (начиная с версии 3.0 и iOS 10+) генерация UUID реализована максимально просто — через нативный тип UUID из фреймворка Foundation. Вам не нужны ни Core Foundation, ни сторонние библиотеки. Вот правильный способ:
import Foundation
// 1. Создаём новый UUID
let uuid = UUID()
// 2. Получаем строковое представление
let uuidString = uuid.uuidString
print(uuidString) // Пример вывода: "E621E1F8-C36C-495A-93FC-0C247A3E6E5F"
Подробное объяснение
- Тип
UUID— это value-тип из Foundation, который полностью заменяет старыйCFUUIDиNSUUID. - Свойство
uuidStringвозвращает стандартный 36-символьный UUID в нижнем или смешанном регистре (зависит от системы). - UUID генерируется на основе случайных чисел (UUID версии 4) — вероятность коллизии ничтожно мала.
Практический пример для приложения
Допустим, вы сохраняете UUID в Core Data и отправляете на сервер. Вот как это может выглядеть:
import Foundation
import CoreData
// Генерация нового UUID для пользователя
let newUserID = UUID().uuidString
// Сохранение в Core Data
let context = persistentContainer.viewContext
let user = UserEntity(context: context)
user.id = newUserID
user.name = "Иван"
try? context.save()
// Отправка на сервер (например, через URLSession)
let payload = ["user_id": newUserID, "action": "register"]
// ... ваш код для POST-запроса
Важные замечания
- Не используйте
CFUUIDCreateв новом коде — это устаревший подход из Objective-C. - Если вам нужен UUID без дефисов (32 символа), можно отформатировать строку:
uuid.uuidString.replacingOccurrences(of: "-", with: ""). - Для iOS 12+ и Swift 5+ код полностью совместим.
- UUID не гарантирует криптографическую уникальность — для этого используйте
SecRandomCopyBytes.
Работа с массивом UUID
Если нужно сгенерировать несколько UUID, используйте цикл:
var uuids: [String] = []
for _ in 1...10 {
uuids.append(UUID().uuidString)
}
print(uuids) // Массив из 10 уникальных строк
Вот и всё! Теперь вы знаете самый простой и правильный способ генерации UUID в Swift. Никаких лишних телодвижений — просто UUID().uuidString.
Альтернативный подход: использование NSUUID (Objective-C legacy)
Если вы работаете со старым кодом или по каким-то причинам не можете использовать современный тип UUID, можно применить NSUUID — обёртку из Objective-C, которая доступна в Swift:
import Foundation
let nsUUID = NSUUID()
let uuidString = nsUUID.uuidString
print(uuidString) // Тот же результат
Когда это может быть полезно?
- Если вы взаимодействуете с Objective-C библиотеками, которые ожидают
NSUUID. - Если нужно сериализовать UUID в старом формате (например, через
NSCoding). - Для обратной совместимости с iOS 9 и старше (хотя это уже редкость).
Однако рекомендую по возможности использовать UUID из Swift — он типобезопасен, работает быстрее и лучше интегрируется с современным Swift-кодом. Разница в производительности минимальна, но Swift API чище и лаконичнее.
Также обратите внимание: если вам нужен UUID без дефисов, оба метода поддерживают одинаковую обработку строки:
let cleanUUID = UUID().uuidString.replacingOccurrences(of: "-", with: "")
Выбирайте тот вариант, который лучше подходит под вашу архитектуру.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги
10 лучших фреймворков Kotlin для веб-разработки — часть 3