Использование 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?
Ответы
Ответ 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)