Kürzen Sie die UUID in Swift auf base64.

UUIDs können auf verteilte Weise generiert werden und sind recht einfach zu verwenden, aber beim Codieren sind sie ziemlich lang.

E2731BE6-470D-4782-B853-E5B13E8A1ECF D879A224-9A58-4D71-8E43-B7F3D001B7E4 FFF4DCE4-3C49-459B-BDB9-EB4B5A030FEB

Ich möchte vermeiden, dies so zu erhalten, wie es ist.

UUIDs werden normalerweise hexadezimal geschrieben. Wenn Sie sie also als Zeichenfolgen speichern, sollten Sie sie noch weiter verkürzen können.

Implementierung

Implementieren Sie eine solche "Erweiterung".


extension UUID {
    public var base64String: String {
        var base64WithPadding = self.data.base64EncodedString()
        //Am Ende von base64==Beseitigen, abschütteln
        base64WithPadding.removeLast(2)
        return base64WithPadding
    }
    
    public var data: Data {
        var result = Data()
        let uuidTuple = self.uuid
        result.append(uuidTuple.0)
        result.append(uuidTuple.1)
        result.append(uuidTuple.2)
        result.append(uuidTuple.3)
        result.append(uuidTuple.4)
        result.append(uuidTuple.5)
        result.append(uuidTuple.6)
        result.append(uuidTuple.7)
        result.append(uuidTuple.8)
        result.append(uuidTuple.9)
        result.append(uuidTuple.10)
        result.append(uuidTuple.11)
        result.append(uuidTuple.12)
        result.append(uuidTuple.13)
        result.append(uuidTuple.14)
        result.append(uuidTuple.15)
        return result
    }
}

Dies kann 36 Zeichen auf 22 Zeichen reduzieren.

40CC21EA-7D27-49CC-8A18-280373933BE2 -> QMwh6n0nScyKGCgDc5M74g
2AF87112-E64C-441F-85E1-FD4FCCD097CA -> KvhxEuZMRB+F4f1PzNCXyg
D9C051E6-D7E2-4198-9CB1-A399E347D860 -> 2cBR5tfiQZicsaOZ40fYYA

Prüfung

Testen Sie mit dem folgenden Code

for _ in 0..<10 {
    let id = UUID()
    let data = Data(base64Encoded: id.base64String + "==")!

    let uuid = UUID(uuid: (
        data[0], data[1], data[2], data[3], data[4], data[5],
        data[6], data[7], data[8], data[9], data[10], data[11],
        data[12], data[13], data[14], data[15]
    ))

    print(id, "->", id.base64String, "->", uuid)
}
40CC21EA-7D27-49CC-8A18-280373933BE2 -> QMwh6n0nScyKGCgDc5M74g ->
40CC21EA-7D27-49CC-8A18-280373933BE2

2AF87112-E64C-441F-85E1-FD4FCCD097CA -> KvhxEuZMRB+F4f1PzNCXyg -> 
2AF87112-E64C-441F-85E1-FD4FCCD097CA

D9C051E6-D7E2-4198-9CB1-A399E347D860 -> 2cBR5tfiQZicsaOZ40fYYA -> 
D9C051E6-D7E2-4198-9CB1-A399E347D860

Es kann reversibel komprimiert werden.

Recommended Posts

Kürzen Sie die UUID in Swift auf base64.
Übergeben Sie das Gebietsschema i18n an JavaScript
Ich möchte den oberen Rand in der UITableView von Grouped entfernen (schnell)
[Swift] Kopieren Sie die Zeichenfolge in die Zwischenablage
[swift5] So legen Sie die Farbe hexadezimal fest
Java-Referenz zum Verständnis in der Abbildung
So führen Sie eine Basiskonvertierung in Java durch
So erhalten Sie das Datum mit Java
So überschreiben Sie Firebase-Daten mit Swift
[Swift] So ermitteln Sie die Anzahl der Elemente in einem Array (Super Basic)
So überprüfen Sie das Protokoll im Docker-Container
[Swift 5] Verarbeitung zum Schließen der Tastatur in UITableView
Ich habe versucht, die Sitzung in Rails zu organisieren
3 Möglichkeiten zum Importieren von Bibliotheken in Android Studio
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
Wenn Eclipse den Server nicht starten kann
[Swift] So ändern Sie die Reihenfolge der Balkenelemente in Tab Bar Controller [Anfänger]
Klassenpfad hinzufügen: zu dem in spring.datasource.schema angegebenen Pfad
So führen Sie Aufgaben parallel zu Swift in Swift Package aus
So erstellen Sie die einfachste Blockchain in Ruby
So überprüfen Sie Rails-Befehle im Terminal
Ich möchte den Wert in Ruby erhalten
[Swift] Eine einfache Art, Entlassung zu beschreiben, die im Einführungsbuch nicht gelehrt wurde
[Swift] So zeigen Sie die eingegebenen Zeichen im Widget über UserDefaults an, wenn Sie das WidgetKit verwenden
Ich war süchtig nach NoSuchMethodError in Cloud-Endpunkten
So implementieren Sie UICollectionView mit Code nur in Swift
So stellen Sie die Anzeigezeit in Rails auf japanische Zeit ein
[Java] So lassen Sie den privaten Konstruktor in Lombok weg
Ich möchte eine TraceId in das Protokoll einbetten
Tokoro habe ich in der Migration von Wicket 7 auf 8 umgeschrieben
[Swift] Farbe in den Benutzerstandards mit der Swift-Benutzeroberfläche speichern (Hinweis)
Verstehen Sie die Eigenschaften von Scala in 5 Minuten (Einführung in Scala)
Quelle zum Abrufen der Umleitungsquell-URL in Java
So erstellen Sie einen Daten-URI (base64) in Java
Organisierte schrittweise Interaktion mit dem JDK
In der Abbildung verstandene Java-Klassen und -Instanzen
So geben Sie den Ressourcenpfad beim HTML-Import an
Finden Sie mit Swift eine Annäherung an log (1 + x)
So debuggen Sie die generierte JAR-Datei mit Eclipse
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
[Swift] So erhalten Sie die Firebase-Dokument-ID
[Schienen] So zeigen Sie Bilder in der Ansicht an
Debuggen mit Eclipse
Teilen wird in Swift zu 0
Mehrdimensionales Array in Swift
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird