การสร้าง 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 ได้หรือไม่
Nicolas Manzini

@NicolasManzini สามารถทำได้เช่นเดียวกับประเภทอื่น ๆ
Gabriele Petronella

2
@macdonjo ใช่แล้ว API นั้นเปลี่ยนไปตามกาลเวลาและตอนนี้ก็คืนค่าOptional<NSData>ซึ่งคุณต้องแกะก่อนใช้
Gabriele Petronella

3
ใน Swift2 ไม่จำเป็นต้องใช้ "เป็น" นักแสดงเนื่องจากจะเชื่อมโยงโดยอัตโนมัติ
Jacky

1
การแปลงเป็น UTF-8 ไม่สามารถล้มเหลวดังนั้นการรวมตัวเลือกเพิ่มเติมที่ไม่จำเป็นจริงๆคุณสามารถบังคับให้แกะที่นี่ได้
Martin R

33

สวิฟต์ 4 และ 3

การสร้างDataวัตถุจากStringวัตถุได้รับการเปลี่ยนแปลงใน Swift 3 เวอร์ชันที่ถูกต้องในขณะนี้คือ:

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

ขอบคุณ สิ่งนี้ใช้ได้กับฉันใน swift 3 อย่างสมบูรณ์แบบ ให้อินพุต = "สตริงการทดสอบ" ให้ xdata = input.data (โดยใช้: String.Encoding.utf8)
raddevus

1
ความคิดใดที่ว่าทำไมสตริง (ข้อมูล: ข้อมูล!, การเข้ารหัส: .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+ นี่เป็นวิธีที่มีประสิทธิภาพมากที่สุด
vadian



0

แปลงสตริงเป็นข้อมูล

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

แปลงข้อมูลเป็นสตริง

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.