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?

zacjordaan
źródło
5
Możesz także użyć let uuid = NSUUID.UUID (). UUIDString
Yatheesha BL
Spójrz na stackoverflow.com/questions/3773776/…
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)
Ahmed Al Hafoudh
źródło
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.

James Frost
źródło
18

Dla Swift 4 ;

let uuid = NSUUID().uuidString.lowercased()
Celil Bozkurt
źródło
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.

Scott H.
źródło
8

Również canużywasz go lowercaseponiżej

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

Wynik

68b696d7-320b-4402-a412-d9cee10fc6a3

Dziękuję Ci !

SwiftDeveloper
źródło
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)
iAleksandr
źródło