Wygeneruj identyfikator UUID na iOS z Swift


296

W mojej aplikacji iOS Swift chcę generować losowe ciągi UUID ( GUID ) do użycia jako klucz tabeli, a ten fragment kodu wydaje się działać:

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

Czy to jest bezpieczne?

Czy może jest lepsze (zalecane) podejście?


5
Możesz także użyć let uuid = NSUUID.UUID (). UUIDString
Yatheesha BL


1
Zamiast zmiany zaakceptuj jedną z odpowiedzi. Ponieważ robisz to w sposób zaproponowany przez @AhemdAlHafoudh, proponuję zaakceptować jego odpowiedź.
DarkDust

Ach, rozumiem. Dzięki ... gotowe.
zacjordaan

Odpowiedzi:


627

Spróbuj tego:

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

Swift 3/4/5

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

6
W XCode 6.1 znalazłem ten błąd: „UUID ()” jest niedostępny: użyj konstrukcji obiektu „NSUUID ()”. Powinniśmy zmienić to na NSUUID (). UUIDString
ohyes

Powyższa sugestia nie różni się niczym od dzwonienia NSUUID.init().UUIDString, prawda?
Kyle Redfearn,

4
Od Xcode 8 (beta), iOS 10 i Swift 3, nazwa została zmieniona naUUID().uuidString
califrench

Chcesz dodać to do odpowiedzi?
Ahmed Al Hafoudh

1
Cześć Użyłem tej metody UUID (). UuidString, ale wydaje się, że zwraca inny ciąg za każdym razem, gdy go używam, chcę, aby była to 1 wartość tylko dla aplikacji, którą instaluję. Jakiś wgląd?
nerezza

28

Możesz także użyć interfejsu API NSUUID :

let uuid = NSUUID()

Jeśli chcesz odzyskać wartość ciągu, możesz użyć uuid.UUIDString.

Uwaga: NSUUIDjest dostępna od iOS 6 i nowszych.


18

Dla Swift 4 ;

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

3
Cmentarz nitpick tutaj, ale nie wiem, dlaczego UUID z małymi literami jest lepszy niż zwykły UUID.
Alex Kornhauser

13

W Swift 3 wiele Foundationtypów porzuciło prefiks „NS”, aby uzyskać do niego dostęp UUID().uuidString.


8

Również canużywasz go lowercaseponiżej

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

Wynik

68b696d7-320b-4402-a412-d9cee10fc6a3

Dziękuję Ci !


1
Dzięki. terazNSUUID().uuidString.lowercased()
Patrick Dura

4
Jaka jest korzyść z używania małych liter w ten sposób?
Luke Stanyer

Być może jest to bardziej przyjemne dla oka niż wielkie litery?
tgunr

5

Za każdym razem zostanie to wygenerowane:

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

Za każdym razem zostanie wygenerowany nowy:

let uuid = UUID().uuidString
print(uuid)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.