J'ai essayé d'initialiser une chaîne depuis NSData
Swift.
Dans la documentation NSString Cocoa, Apple dit que vous devez utiliser ceci:
init(data data: NSData!, encoding encoding: UInt)
Cependant, Apple n'a inclus aucun exemple d'utilisation ou où placer le fichier init
.
J'essaie de convertir le code suivant d'Objective-C en Swift
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
J'ai essayé beaucoup de syntaxes possibles telles que les suivantes (bien sûr, cela n'a pas fonctionné):
var string:NSString!
string = init(data: fooData,encoding: NSUTF8StringEncoding)
let datastring = NSString(data: fooData, encoding:NSUTF8StringEncoding)
NSData
directement en SwiftString
(au lieu d'unNSString
)?String
est unNSString
... tout cela devrait être:var datastring = String(data: someData, encoding: NSUTF8StringEncoding)
Voici le code implémenté nécessaire:
dans Swift 3.0:
ou juste
Ancienne version Swift:
dans Swift 2.0:
dans Swift 1.0:
la source
error: use of unresolved identifier 'NSUTF8StringEncoding'
var dataString = String(data: fooData, encoding: .utf8)
.Swift 2.0
Il semble que Swift 2.0 a en fait introduit le en
String(data:encoding:)
tant qu'extension String lors de l'importationFoundation
. Je n'ai trouvé aucun endroit où cela est documenté, assez bizarrement.(avant Swift 2.0) Extension légère
Voici une petite extension copiable sans utiliser
NSString
, coupons l'intermédiaire.Cela vous donne également accès à
data.byteBuffer
quel type de séquence est, donc toutes ces opérations intéressantes que vous pouvez faire avec des séquences fonctionnent également, comme faire unreduce { $0 &+ $1 }
pour une somme de contrôle.Remarques
Dans ma précédente édition, j'ai utilisé cette méthode:
Le problème avec cette approche est que je crée une copie de l'information dans un nouveau tableau, donc, je dupliquer la quantité d'octets ( en particulier:
encoding size * data.length
)la source
Depuis la troisième version de Swift, vous pouvez effectuer les opérations suivantes:
simialr à ce que Sunkas a conseillé.
la source
la source
Une autre réponse basée sur les extensions (est-ce que ça me manque en Java):
Ensuite, vous pouvez l'utiliser:
Notez que la chaîne est facultative, l'initiale
NSData
peut ne pas être convertible en Utf8.la source
Objectif c
Rapide
http://objectivec2swift.blogspot.in/2016/03/coverting-nsdata-to-nsstring-or-convert.html
la source