He estado tratando de inicializar una cadena de NSData
Swift.
En la documentación de NSString Cocoa, Apple dice que debe usar esto:
init(data data: NSData!, encoding encoding: UInt)
Sin embargo, Apple no incluyó ningún ejemplo de uso o dónde colocar el init
.
Estoy tratando de convertir el siguiente código de Objective-C a Swift
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
He estado probando muchas sintaxis posibles como las siguientes (por supuesto, no funcionó):
var string:NSString!
string = init(data: fooData,encoding: NSUTF8StringEncoding)
let datastring = NSString(data: fooData, encoding:NSUTF8StringEncoding)
NSData
directamente en un SwiftString
(en lugar de unNSString
)?String
es unNSString
... todo esto debería ser:var datastring = String(data: someData, encoding: NSUTF8StringEncoding)
Este es el código implementado necesario:
en Swift 3.0:
o solo
Versión rápida anterior:
en Swift 2.0:
en Swift 1.0:
fuente
error: use of unresolved identifier 'NSUTF8StringEncoding'
var dataString = String(data: fooData, encoding: .utf8)
.Swift 2.0
Parece que Swift 2.0 ha introducido la
String(data:encoding:)
extensión String cuando importaFoundation
. No he encontrado ningún lugar donde esto esté documentado, por extraño que parezca.(pre Swift 2.0) Extensión ligera
Aquí hay una pequeña extensión que se puede copiar y pegar sin usar
NSString
, cortemos al intermediario.Esto también le da acceso a
data.byteBuffer
cuál es un tipo de secuencia, por lo que todas esas operaciones interesantes que puede hacer con secuencias también funcionan, como hacer unreduce { $0 &+ $1 }
una suma de verificación.Notas
En mi edición anterior, utilicé este método:
El problema con este enfoque, es que estoy creando una copia de la información en una nueva matriz, por lo tanto, estoy duplicar la cantidad de bytes (en concreto:
encoding size * data.length
)fuente
Desde la tercera versión de Swift puedes hacer lo siguiente:
similar a lo que aconsejó Sunkas.
fuente
fuente
Otra respuesta basada en extensiones (chico, extraño esto en Java):
Entonces puedes usarlo:
Tenga en cuenta que la cadena es opcional, la inicial
NSData
puede no ser convertible a Utf8.fuente
C objetivo
Rápido
http://objectivec2swift.blogspot.in/2016/03/coverting-nsdata-to-nsstring-or-convert.html
fuente