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.

Jackson Egan
sumber

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)
}
Gabriele Petronella
sumber
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)
Kata Sikira
sumber
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)
Shafraz Buhary
sumber
4

Cepat 4

let data = myStringVariable.data(using: String.Encoding.utf8.rawValue)
jatin
sumber
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)!
Vinod Joshi
sumber
2

Untuk membuat data bukan opsional, saya sarankan menggunakannya:

let key = "1234567"
let keyData = Data(key.utf8)
Ramis
sumber
1
Di Swift 3+ ini adalah cara yang paling efisien.
vadian
2

Cepat 4.2

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

Cepat 5

let data = Data(YourString.utf8)
Sanjay Mishra
sumber
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)
      }
   }
Sumit
sumber