Membuat NSData dari NSString di Swift


174

Saya mencoba untuk akhirnya memiliki NSMutableURLRequestdengan yang valid HTTPBody, tapi sepertinya saya tidak bisa mendapatkan data string saya (berasal dari a UITextField) menjadi NSDataobjek yang dapat digunakan .

Saya telah melihat metode ini untuk sebaliknya:

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

Tapi sepertinya saya tidak dapat menemukan dokumentasi untuk kasus penggunaan saya. Saya terbuka untuk meletakkan string ke dalam tipe lain jika perlu, tetapi tidak ada opsi inisialisasi untuk NSDatamenggunakan Swift yang tampaknya saya cari.

Jawaban:


359

Dalam Swift 3

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

Di Swift 2 (atau jika Anda sudah memiliki NSStringinstance)

let data = string.dataUsingEncoding(NSUTF8StringEncoding)

Dalam Swift 1 (atau jika Anda memiliki swift String):

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

Perhatikan juga bahwa itu dataadalah Optional<NSData>(karena konversi mungkin gagal), jadi Anda harus membukanya sebelum menggunakannya, misalnya:

if let d = data {
    println(d)
}

Swift dapat menyimpulkan tipe NSData?
Nicolas Manzini

@NicolasManzini yakin itu bisa, seperti halnya dengan jenis lainnya.
Gabriele Petronella

2
@ macdonjo ya, API itu berubah seiring waktu dan sekarang mengembalikan Optional<NSData>, yang harus Anda buka sebelum menggunakannya
Gabriele Petronella

3
Di Swift2, tidak perlu menggunakan "sebagai" pemain karena itu secara otomatis dijembatani
Jacky

1
Konversi ke UTF-8 tidak dapat gagal, oleh karena itu opsional yang mengikatnya tidak benar-benar diperlukan, Anda dapat membuka paksa di sini.
Martin R

33

Swift 4 & 3

Membuat Dataobjek dari Stringobjek telah diubah di Swift 3. Versi yang benar sekarang adalah:

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

Terima kasih. Ini bekerja untuk saya dalam 3 cepat. biarkan input = "test string" biarkan xdata = input.data (menggunakan: String.Encoding.utf8)
raddevus

1
Adakah alasan mengapa String (data: data !, encoding: .nonLossyASCII) akan menjadi nol?
Happiehappie

4

Metode di sini sangat sederhana

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

4

Cepat 4

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

Jangan gunakan NSStringdi Swift.
vadian

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

Untuk membuat data bukan opsional, saya sarankan menggunakannya:

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

1
Di Swift 3+ ini adalah cara yang paling efisien.
vadian

2

Cepat 4.2

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


0

Konversi String ke Data

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

Konversi Data ke String

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.