स्विफ्ट में NSString से NSData बनाना


174

मैं आखिरकार NSMutableURLRequestएक वैध के साथ प्रयास कर रहा हूं HTTPBody, लेकिन मैं अपने स्ट्रिंग डेटा (ए UITextField) से एक प्रयोग करने योग्य NSDataवस्तु में नहीं जा सकता।

मैंने दूसरे तरीके से जाने के लिए यह विधि देखी है:

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

लेकिन मैं अपने उपयोग के मामले के लिए कोई दस्तावेज नहीं ढूंढ सकता। यदि आवश्यक हो तो मैं स्ट्रिंग को किसी अन्य प्रकार में खोलने के लिए तैयार हूं, लेकिन NSDataस्विफ्ट का उपयोग करने के लिए कोई भी आरंभीकरण विकल्प ऐसा नहीं लगता है जो मैं देख रहा हूं।

जवाबों:


359

स्विफ्ट 3 में

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

स्विफ्ट 2 में (या यदि आपके पास पहले से कोई NSStringउदाहरण है)

let data = string.dataUsingEncoding(NSUTF8StringEncoding)

स्विफ्ट 1 में (या यदि आपके पास स्विफ्ट है String):

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

यह भी ध्यान दें कि dataयह एक है Optional<NSData>(चूंकि रूपांतरण विफल हो सकता है), इसलिए आपको इसे उपयोग करने से पहले इसे खोलना होगा, उदाहरण के लिए:

if let d = data {
    println(d)
}

NSData टाइप कर सकती हैं स्विफ्ट?
निकोलस मंज़िनी

@ निकोलस मंजीनी सुनिश्चित करें कि यह किसी भी अन्य प्रकार के साथ हो सकता है।
गैब्रियल पेट्रोनेला

2
@macdonjo yep, कि API समय के साथ बदल गया और अब यह एक रिटर्न देता है Optional<NSData>, जिसे उपयोग करने से पहले आपको खोलना होगा
गेब्रियल पेट्रोनेला

3
Swift2 में, "कास्ट" का उपयोग करने की कोई आवश्यकता नहीं है क्योंकि यह स्वचालित रूप से ब्रिज हो गया है
जैकी

1
UTF-8 में रूपांतरण विफल नहीं हो सकता है, इसलिए एक वैकल्पिक बाइंडिंग जो वास्तव में आवश्यक नहीं है, आप यहां-अनचाहे को बाध्य कर सकते हैं।
मार्टिन आर

33

स्विफ्ट 4 और 3

Dataऑब्जेक्ट से Stringऑब्जेक्ट बनाना स्विफ्ट 3 में बदल दिया गया है। सही संस्करण अब है:

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

धन्यवाद। यह मेरे लिए स्विफ्ट 3 में पूरी तरह से काम करता है। इनपुट दें = "परीक्षण स्ट्रिंग" को xdata = input.data (का उपयोग करके: String.Encoding.utf8)
raddevus

1
किसी भी विचार क्यों स्ट्रिंग (डेटा: डेटा !, एन्कोडिंग: .nonLossyASCII) शून्य हो जाएगा?
हैप्पीहापी


4

स्विफ्ट 4

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

NSStringस्विफ्ट में उपयोग न करें ।
7

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
स्विफ्ट 3+ में यह सबसे कुशल तरीका है।
14

2

स्विफ्ट 4.2

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


0

स्ट्रिंग को डेटा में बदलें

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

स्ट्रिंग में डेटा परिवर्तित करें

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.