Tạo NSData từ NSString trong Swift


174

Cuối cùng tôi đang cố gắng có NSMutableURLRequestmột giá trị hợp lệ HTTPBody, nhưng dường như tôi không thể đưa dữ liệu chuỗi của mình (đến từ a UITextField) vào một NSDatađối tượng có thể sử dụng được .

Tôi đã thấy phương pháp này để đi theo cách khác:

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

Nhưng tôi dường như không thể tìm thấy bất kỳ tài liệu cho trường hợp sử dụng của tôi. Tôi sẵn sàng đưa chuỗi vào một số loại khác nếu cần, nhưng không có tùy chọn khởi tạo nào để NSDatasử dụng Swift dường như là thứ tôi đang tìm kiếm.

Câu trả lời:


359

Trong Swift 3

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

Trong Swift 2 (hoặc nếu bạn đã có một NSStringví dụ)

let data = string.dataUsingEncoding(NSUTF8StringEncoding)

Trong Swift 1 (hoặc nếu bạn có nhanh chóng String):

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

Cũng lưu ý rằng đó datalà một Optional<NSData>(vì chuyển đổi có thể thất bại), vì vậy, bạn sẽ cần mở khóa trước khi sử dụng nó, ví dụ:

if let d = data {
    println(d)
}

Swift có thể suy ra loại NSData?
Nicolas Manzini

@NicolasManzini chắc chắn rằng nó có thể, như với bất kỳ loại nào khác.
Gabriele Petronella

2
@macdonjo yep, API đó đã thay đổi theo thời gian và bây giờ nó sẽ trả lại một Optional<NSData>cái mà bạn cần mở ra trước khi sử dụng
Gabriele Petronella

3
Trong Swift2, không cần sử dụng cast "as" vì nó tự động được bắc cầu
Jacky

1
Chuyển đổi sang UTF-8 không thể thất bại, do đó, một ràng buộc tùy chọn không thực sự cần thiết, bạn có thể buộc mở khóa ở đây.
Martin R

33

Swift 4 & 3

Tạo Datađối tượng từ Stringđối tượng đã được thay đổi trong Swift 3. Phiên bản chính xác bây giờ là:

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

Cảm ơn. Điều này làm việc cho tôi trong swift 3 hoàn hảo. let input = "test string" let xdata = input.data (bằng cách sử dụng: String.Encoding.utf8)
raddevus

1
Bất cứ ý tưởng tại sao Chuỗi (dữ liệu: dữ liệu!, Mã hóa: .nonLossyASCII) sẽ không?
Happiehappie

4

Đây là phương pháp rất đơn giản.

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

4

Swift 4

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

Đừng sử dụng NSStringtrong 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

Để tạo không phải dữ liệu tùy chọn, tôi khuyên bạn nên sử dụng nó:

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

1
Trong Swift 3+ đây là cách hiệu quả nhất.
vadian

2

Swift 4.2

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


0

Chuyển đổi chuỗi thành dữ liệu

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

Chuyển đổi dữ liệu thành chuỗi

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.