Подтвердить что ты не робот

Использование Swift String с NSData без NSString

Можно ли инициализировать строку Swift (не NSString) с содержимым объекта NSData, не создав сначала NSString?

Я знаю, что могу использовать это с помощью NSString:

var datastring = NSString(data data: NSData!, encoding encoding: UInt)

Но как я могу использовать базовый тип Swift String? Я думал, что строки Swift и NSStrings являются взаимозаменяемыми, мне действительно нужно получить данные из NSData с помощью NSString, а затем присваивать это значение строке Swift?

4b9b3361

Ответ 1

С Swift 1.2 они не совсем взаимозаменяемы, но они конвертируемы, поэтому нет причин не использовать NSString и его конструкторы, когда вам нужно. Это будет нормально работать:

var datastring = NSString(data:data, encoding:NSUTF8StringEncoding) as! String

Требуется as!, потому что NSString(...) может возвращать nil для недопустимого ввода - если вы не уверены, что данные представляют допустимую строку UTF8, вы можете использовать следующее вместо этого, чтобы вернуть String? (aka Optional<String>).

var datastring = NSString(data:data, encoding:NSUTF8StringEncoding) as String?

После построения вы можете использовать datastring так же, как и любую другую строку Swift, например

var foo = datastring + "some other string"

Ответ 2

var buffer = [UInt8](count:data.length, repeatedValue:0)
data.getBytes(&buffer, length:data.length)
var datastring = String(bytes:buffer, encoding:NSUTF8StringEncoding)

Ответ 3

В Swift 2.0 Вы можете сделать что-то вроде этого: -

import Foundation

var dataString = String(data: YourData, encoding: NSUTF8StringEncoding)

В Swift 3.0: -

import Foundation

var dataString = String(data: data, encoding: String.Encoding.utf8)