Створення NSData з NSString у Swift


174

Я намагаюся в кінцевому підсумку мати NSMutableURLRequestз дійсним HTTPBody, але я не можу отримати свої рядкові дані (що надходять від a UITextField) у корисний NSDataоб'єкт.

Я бачив цей метод інакше:

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

Але я, здається, не можу знайти жодної документації для мого випадку використання. Я готовий ввести рядок у якийсь інший тип, якщо потрібно, але жоден із варіантів ініціалізації NSDataвикористання Swift, здається, не є тим, що я шукаю.

Відповіді:


359

У 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)
}

Swift може зробити висновок про тип NSData?
Ніколя Манзіні

@NicolasManzini впевнений, що може, як і будь-який інший тип.
Габріеле Петронелла

2
@macdonjo так, що API змінився з часом, і тепер він повертає Optional<NSData>, який потрібно розкрутити, перш ніж використовувати
Gabriele Petronella

3
У Swift2 немає необхідності використовувати ролі "як", оскільки вона автоматично моститься
Джекі

1
Перетворення в UTF-8 не може бути невдалим, тому необов'язкове прив'язування його не дуже потрібне, тут ви можете примусово скасувати.
Мартін R

33

Швидкий 4 і 3

Створення Dataоб'єкта з Stringоб'єкта було змінено в Swift 3. Правильна версія тепер:

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

Дякую. Це працювало для мене в швидкому 3 чудово. нехай input = "тестовий рядок" нехай xdata = input.data (використовуючи:
String.Encoding.utf8

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.