Создание NSData из NSString в Swift


174

Я пытаюсь в конечном итоге получить NSMutableURLRequestс действительным HTTPBody, но я не могу получить свои строковые данные (поступающие из UITextField) в пригодный для использования NSDataобъект.

Я видел этот метод, чтобы пойти другим путем:

NSString(data data: NSData!, encoding encoding: UInt)

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

Ответы:


359

В Свифт 3

let data = string.data(using: .utf8)

В Swift 2 (или если у вас уже есть NSStringэкземпляр)

let data = string.dataUsingEncoding(NSUTF8StringEncoding)

В Swift 1 (или если у вас есть Swift String):

let data = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)

Также обратите внимание, что dataэто Optional<NSData>(поскольку преобразование может завершиться неудачей), поэтому вам нужно будет развернуть его перед использованием, например:

if let d = data {
    println(d)
}

Свифт может вывести тип NSData?
Николас Манзини

@NicolasManzini уверен, что может, как и любой другой тип.
Габриэле Петронелла

2
@macdonjo Да, этот API менялся с течением времени, и теперь он возвращает значение Optional<NSData>, которое нужно развернуть перед использованием
Gabriele Petronella

3
В Swift2 нет необходимости использовать «как» приведение, так как оно автоматически соединено
Джеки

1
Преобразование в UTF-8 не может завершиться неудачей, поэтому необязательное связывание не нужно, его можно принудительно развернуть здесь.
Мартин Р

33

Свифт 4 и 3

Создание Dataобъекта из Stringобъекта было изменено в Swift 3. Теперь верная версия:

let data = "any string".data(using: .utf8)

Спасибо. Это сработало для меня в Swift 3 отлично. let input = "test string" let xdata = input.data (используя: String.Encoding.utf8)
raddevus

1
Любая идея, почему String (data: data !, кодировка: .nonLossyASCII) будет ноль?
Happiehappie



3
// Checking the format
var urlString: NSString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)

// Convert your data and set your request's HTTPBody property
var stringData: NSString = NSString(string: "jsonRequest=\(urlString)")

var requestBodyData: NSData = stringData.dataUsingEncoding(NSUTF8StringEncoding)!

2

Для создания необязательных данных я рекомендую использовать их:

let key = "1234567"
let keyData = Data(key.utf8)

1
В Swift 3+ это самый эффективный способ.
Вадиан



0

Преобразовать строку в данные

extension String {
    func toData() -> Data {
        return Data(self.utf8)
    }
}

Конвертировать данные в строку

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.