Ich habe versucht, eine Zeichenfolge NSData
in Swift zu initialisieren .
In der NSString Cocoa-Dokumentation sagt Apple, dass Sie Folgendes verwenden müssen:
init(data data: NSData!, encoding encoding: UInt)
Apple hat jedoch kein Beispiel für die Verwendung oder den Ort der Platzierung angegeben init
.
Ich versuche, den folgenden Code von Objective-C in Swift zu konvertieren
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
Ich habe viele mögliche Syntaxen wie die folgenden ausprobiert (natürlich hat es nicht funktioniert):
var string:NSString!
string = init(data: fooData,encoding: NSUTF8StringEncoding)
let datastring = NSString(data: fooData, encoding:NSUTF8StringEncoding)
NSData
direkt in einen SwiftString
(anstelle einesNSString
) umzuwandeln ?String
ist einNSString
... all dies sollte sein:var datastring = String(data: someData, encoding: NSUTF8StringEncoding)
Dies ist der implementierte Code, der benötigt wird:
in Swift 3.0:
oder nur
Ältere schnelle Version:
in Swift 2.0:
in Swift 1.0:
quelle
error: use of unresolved identifier 'NSUTF8StringEncoding'
var dataString = String(data: fooData, encoding: .utf8)
.Swift 2.0
Es scheint, dass Swift 2.0 die
String(data:encoding:)
Erweiterung als String beim Importieren tatsächlich eingeführt hatFoundation
. Ich habe seltsamerweise keinen Ort gefunden, an dem dies dokumentiert ist.(vor Swift 2.0) Leichte Erweiterung
Hier ist eine kopierbare kleine Erweiterung, die nicht verwendet werden
NSString
kann. Lassen Sie uns den Mittelsmann ausschneiden.Auf diese Weise erhalten Sie auch Zugriff auf
data.byteBuffer
einen Sequenztyp, sodass alle coolen Operationen, die Sie mit Sequenzen ausführen können, auch funktionieren, z. B.reduce { $0 &+ $1 }
für eine Prüfsumme.Anmerkungen
In meiner vorherigen Bearbeitung habe ich diese Methode verwendet:
Das Problem bei diesem Ansatz ist , dass ich eine Kopie der Informationen in ein neues Array bin zu schaffen, damit ich die Menge an Bytes zu duplizieren (speziell:
encoding size * data.length
)quelle
Seit der dritten Version von Swift können Sie Folgendes tun:
ähnlich wie Sunkas geraten hat.
quelle
quelle
Eine andere Antwort basierend auf Erweiterungen (Junge, vermisse ich das in Java):
Dann können Sie es verwenden:
Beachten Sie, dass die Zeichenfolge optional ist und die Initiale
NSData
möglicherweise nicht in Utf8 konvertierbar ist.quelle
Ziel c
Schnell
http://objectivec2swift.blogspot.in/2016/03/coverting-nsdata-to-nsstring-or-convert.html
quelle