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

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

Я видел этот метод для перехода по другому пути:

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

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

Ответ 1

В Swift 3

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

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

let data = string.dataUsingEncoding(NSUTF8StringEncoding)

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

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

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

if let d = data {
    println(d)
}

Ответ 2

Swift 4 и 3

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

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

Ответ 3

Здесь очень простой метод

let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

Ответ 4

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

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

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

Ответ 5

Swift 4

let data = myStringVariable.data(using: String.Encoding.utf8.rawValue)

Ответ 6

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

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

Ответ 7

Swift 4.2

let data = yourString.data(using: .utf8, allowLossyConversion: true)

Ответ 8

Свифт 5

let data = Data(YourString.utf8)