Erstellen von NSData aus NSString in Swift


174

Ich versuche letztendlich eine NSMutableURLRequestmit einer gültigen zu haben HTTPBody, aber ich kann meine Zeichenfolgendaten (die von a stammen UITextField) nicht in ein verwendbares NSDataObjekt übertragen.

Ich habe diese Methode gesehen, um in die andere Richtung zu gehen:

NSString(data data: NSData!, encoding encoding: UInt)

Aber ich kann anscheinend keine Dokumentation für meinen Anwendungsfall finden. Ich bin offen dafür, die Zeichenfolge bei Bedarf in einen anderen Typ umzuwandeln, aber keine der Initialisierungsoptionen für die NSDataVerwendung von Swift scheint das zu sein, wonach ich suche.

Antworten:


359

In Swift 3

let data = string.data(using: .utf8)

In Swift 2 (oder wenn Sie bereits eine NSStringInstanz haben)

let data = string.dataUsingEncoding(NSUTF8StringEncoding)

In Swift 1 (oder wenn Sie einen Swift haben String):

let data = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)

Beachten Sie auch, dass dies dataeine ist Optional<NSData>(da die Konvertierung möglicherweise fehlschlägt), sodass Sie sie vor der Verwendung auspacken müssen, zum Beispiel:

if let d = data {
    println(d)
}

Swift kann auf NSData-Typ schließen?
Nicolas Manzini

@NicolasManzini sicher, es kann, wie bei jedem anderen Typ.
Gabriele Petronella

2
@macdonjo yep, diese API hat sich im Laufe der Zeit geändert und gibt jetzt eine zurück Optional<NSData>, die Sie vor der Verwendung auspacken müssen
Gabriele Petronella

3
In Swift2 muss "as" nicht verwendet werden, da es automatisch überbrückt wird
Jacky

1
Eine Konvertierung zu UTF-8 kann nicht fehlschlagen. Daher ist eine optionale Bindung nicht unbedingt erforderlich. Sie können das Erzwingen hier ausschließen.
Martin R

33

Swift 4 & 3

Das Erstellen eines DataObjekts aus einem StringObjekt wurde in Swift 3 geändert. Die korrekte Version lautet jetzt:

let data = "any string".data(using: .utf8)

Vielen Dank. Das hat bei mir in Swift 3 perfekt funktioniert. let input = "test string" let xdata = input.data (mit: String.Encoding.utf8)
raddevus

1
Irgendeine Idee, warum String (data: data!, Kodierung: .nonLossyASCII) gleich Null ist?
Happiehappie

4

Hier sehr einfache Methode

let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

4

Swift 4

let data = myStringVariable.data(using: String.Encoding.utf8.rawValue)

Nicht NSStringin Swift verwenden.
Vadian

3
// Checking the format
var urlString: NSString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)

// Convert your data and set your request's HTTPBody property
var stringData: NSString = NSString(string: "jsonRequest=\(urlString)")

var requestBodyData: NSData = stringData.dataUsingEncoding(NSUTF8StringEncoding)!

2

Um nicht optionale Daten zu erstellen, empfehle ich die Verwendung:

let key = "1234567"
let keyData = Data(key.utf8)

1
In Swift 3+ ist dies der effizienteste Weg.
Vadian

2

Swift 4.2

let data = yourString.data(using: .utf8, allowLossyConversion: true)


0

String in Daten konvertieren

extension String {
    func toData() -> Data {
        return Data(self.utf8)
    }
}

Daten in Zeichenfolge konvertieren

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.