Swift'te NSString'den NSData oluşturma


174

Sonuçta NSMutableURLRequestgeçerli bir sahip olmaya çalışıyorum HTTPBody, ama benim dize veri (gelen UITextField) kullanılabilir bir NSDatanesneye almak gibi olamaz .

Ben başka bir yol gitmek için bu yöntemi gördüm:

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

Ancak kullanım durumum için herhangi bir belge bulamıyorum. Gerekirse dizeyi başka bir türe yerleştirmeye açıkım, ancak NSDataSwift'i kullanmak için başlatma seçeneklerinin hiçbiri aradığım şey gibi görünmüyor.

Yanıtlar:


359

Swift 3'te

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

Swift 2'de (veya zaten bir NSStringörneğiniz varsa)

let data = string.dataUsingEncoding(NSUTF8StringEncoding)

Swift 1'de (veya hızlı bir şekilde varsa String):

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

Ayrıca bunun databir Optional<NSData>dönüşüm olduğunu unutmayın (dönüşüm başarısız olabileceğinden), kullanmadan önce paketini açmanız gerekir, örneğin:

if let d = data {
    println(d)
}

Swift NSData türünü çıkarabilir mi?
Nicolas Manzini

@NicolasManzini, diğer tüm tiplerde olduğu gibi emin olabilir.
Gabriele Petronella

2
@macdonjo yep, bu API zamanla değişti ve şimdi Optional<NSData>kullanmadan önce paketini açmanız gereken bir döndürüyor
Gabriele Petronella

3
Swift2'de, otomatik olarak köprülenmiş olduğundan "as" rolünü kullanmaya gerek yoktur
Jacky

1
UTF-8'e dönüştürme başarısız olamaz , bu nedenle gerçekten gerekli olmayan isteğe bağlı bir bağlama, burada zorla açabilirsiniz.
Martin R

33

Swift 4 ve 3

Yaratırken Datanesne Stringnesne Swift değiştirildi 3. Doğru versiyonu artık şudur:

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

Teşekkürler. Bu benim için hızlı 3 mükemmel çalıştı. let input = "test string" let xdata = input.data (kullanarak:
String.Encoding.utf8

1
Neden String (data: data !, encoding: .nonLossyASCII) nil olacak?
Happiehappie

4

İşte çok basit bir yöntem

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

4

Hızlı 4

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

NSStringSwift'te kullanmayın .
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

İsteğe bağlı olmayan veriler oluşturmak için bu verileri kullanmanızı öneririm:

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

1
Swift 3+ sürümünde bu en etkili yoldur.
vadian

2

Hızlı 4.2

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


0

Dizeyi Verilere Dönüştür

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

Verileri Dizeye Dönüştür

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.