Eu tenho tentado inicializar uma string NSData
no Swift.
Na documentação do NSString Cocoa, a Apple está dizendo que você deve usar isto:
init(data data: NSData!, encoding encoding: UInt)
No entanto, a Apple não incluiu nenhum exemplo de uso ou onde colocá-lo init
.
Estou tentando converter o seguinte código de Objective-C para Swift
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
Eu tenho tentado muitas sintaxes possíveis, como as seguintes (é claro que não funcionou):
var string:NSString!
string = init(data: fooData,encoding: NSUTF8StringEncoding)
let datastring = NSString(data: fooData, encoding:NSUTF8StringEncoding)
NSData
diretamente em um SwiftString
(em vez de umNSString
)?String
é umaNSString
... tudo isso deve ser:var datastring = String(data: someData, encoding: NSUTF8StringEncoding)
Este é o código implementado necessário:
no Swift 3.0:
ou apenas
Versão rápida mais antiga:
no Swift 2.0:
no Swift 1.0:
fonte
error: use of unresolved identifier 'NSUTF8StringEncoding'
var dataString = String(data: fooData, encoding: .utf8)
.Swift 2.0
Parece que o Swift 2.0 realmente introduziu a
String(data:encoding:)
extensão como String quando você importaFoundation
. Não encontrei nenhum lugar onde isso esteja documentado, por incrível que pareça.(pré Swift 2.0) Extensão leve
Aqui está uma pequena extensão que pode ser copiada sem usar
NSString
, vamos cortar o intermediário.Isso também fornece acesso a
data.byteBuffer
um tipo de sequência, para que todas as operações legais que você pode realizar com sequências também funcionem, como fazer umreduce { $0 &+ $1 }
para uma soma de verificação.Notas
Na minha edição anterior, usei este método:
O problema com essa abordagem é que estou criando uma cópia das informações em uma nova matriz, portanto, estou duplicando a quantidade de bytes (especificamente
encoding size * data.length
:)fonte
Desde a terceira versão do Swift, você pode fazer o seguinte:
semelhante ao que Sunkas aconselhou.
fonte
fonte
Outra resposta baseada em extensões (garoto, eu sinto falta disso em Java):
Então você pode usá-lo:
Observe que a string é opcional, a inicial
NSData
pode ser inconversível ao Utf8.fonte
Objetivo - C
Rápido
http://objectivec2swift.blogspot.in/2016/03/coverting-nsdata-to-nsstring-or-convert.html
fonte