Saya telah mencoba menginisialisasi string dari NSData
dalam Swift.
Dalam Dokumentasi Kakao NSString Apple mengatakan Anda harus menggunakan ini:
init(data data: NSData!, encoding encoding: UInt)
Namun Apple tidak menyertakan contoh apa pun untuk penggunaan atau di mana menempatkan init
.
Saya mencoba mengubah kode berikut dari Objective-C ke Swift
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
Saya telah mencoba banyak sintaks yang mungkin seperti berikut (tentu saja tidak berhasil):
var string:NSString!
string = init(data: fooData,encoding: NSUTF8StringEncoding)
let datastring = NSString(data: fooData, encoding:NSUTF8StringEncoding)
NSData
langsung menjadi SwiftString
(bukan sebuahNSString
)?String
adalahNSString
... semua ini harus:var datastring = String(data: someData, encoding: NSUTF8StringEncoding)
Ini adalah kode yang diimplementasikan yang diperlukan:
di Swift 3.0:
atau hanya
Versi lebih cepat:
dalam Swift 2.0:
dalam Swift 1.0:
sumber
error: use of unresolved identifier 'NSUTF8StringEncoding'
var dataString = String(data: fooData, encoding: .utf8)
.Swift 2.0
Tampaknya Swift 2.0 sebenarnya telah memperkenalkan
String(data:encoding:)
ekstensi String ketika Anda mengimporFoundation
. Saya belum menemukan tempat di mana ini didokumentasikan, cukup aneh.(pra Swift 2.0) Ekstensi ringan
Ini ekstensi kecil yang bisa di-copy-paste tanpa menggunakan
NSString
, mari kita potong perantara.Ini juga memberi Anda akses
data.byteBuffer
yang merupakan tipe urutan, sehingga semua operasi keren yang dapat Anda lakukan dengan urutan juga berfungsi, seperti melakukan areduce { $0 &+ $1 }
untuk checksum.Catatan
Dalam edit saya sebelumnya, saya menggunakan metode ini:
Masalah dengan pendekatan ini, adalah bahwa saya membuat salinan informasi ke dalam array baru, jadi, saya menduplikasi jumlah byte (khusus
encoding size * data.length
:)sumber
Sejak versi ketiga Swift, Anda dapat melakukan hal berikut:
simialr dengan apa yang disarankan Sunkas.
sumber
sumber
Jawaban lain berdasarkan ekstensi (boy do I miss this di Java):
Maka Anda dapat menggunakannya:
Perhatikan bahwa string bersifat opsional, inisial
NSData
mungkin tidak dapat dikonversi ke Utf8.sumber
Tujuan - C
Cepat
http://objectivec2swift.blogspot.in/2016/03/coverting-nsdata-to-nsstring-or-convert.html
sumber