string - स्विफ्ट में एनएसडीटा से स्ट्रिंग कैसे शुरू करें




swift cocoa (5)

स्विफ्ट 2.0

ऐसा लगता है कि जब आप Foundation आयात करते हैं तो स्विफ्ट 2.0 ने वास्तव में String(data:encoding:) को स्ट्रिंग एक्सटेंशन के रूप में पेश किया है। मुझे कोई जगह नहीं मिली है जहां यह दस्तावेज है, अजीब रूप से पर्याप्त है।

(प्री स्विफ्ट 2.0) लाइटवेट एक्सटेंशन

NSString का उपयोग किए बिना एक कॉपी-पेस्टेबल छोटे एक्सटेंशन यहां है, चलो मध्य-व्यक्ति को काट दें।

import Foundation

extension NSData
{
    var byteBuffer : UnsafeBufferPointer<UInt8> { get { return UnsafeBufferPointer<UInt8>(start: UnsafeMutablePointer<UInt8>(self.bytes), count: self.length) }}
}

extension String
{
    init?(data : NSData, encoding : NSStringEncoding)
    {
        self.init(bytes: data.byteBuffer, encoding: encoding)
    }
}

// Playground test
let original = "Nymphs blitz quick vex dwarf jog"
let encoding = NSASCIIStringEncoding

if let data = original.dataUsingEncoding(encoding)
{
    String(data: data, encoding: encoding)
}

यह आपको data.byteBuffer तक पहुंच प्रदान करता है data.byteBuffer जो एक अनुक्रम प्रकार है, इसलिए आप उन सभी अच्छे परिचालनों को अनुक्रमों के साथ भी कर सकते हैं, जैसे चेकसम के लिए reduce { $0 &+ $1 } को कम करना।

टिप्पणियाँ

मेरे पिछले संपादन में, मैंने इस विधि का उपयोग किया था:

var buffer = Array<UInt8>(count: data.length, repeatedValue: 0x00)
data.getBytes(&buffer, length: data.length)
self.init(bytes: buffer, encoding: encoding)

इस दृष्टिकोण के साथ समस्या यह है कि मैं जानकारी की प्रतिलिपि एक नई सरणी में बना रहा हूं, इस प्रकार, मैं बाइट्स की मात्रा को डुप्लिकेट कर रहा हूं (विशेष रूप से: encoding size * data.length )

मैं स्विफ्ट में NSData से एक स्ट्रिंग शुरू करने की कोशिश कर रहा हूं।

एनएसएसटींग कोको दस्तावेज़ीकरण में ऐप्पल कह रहा है कि आपको इसका उपयोग करना होगा:

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

हालांकि ऐप्पल में उपयोग के लिए कोई उदाहरण शामिल नहीं था या init कहां रखा जाए।

मैं निम्नलिखित कोड को उद्देश्य-सी से स्विफ्ट में बदलने की कोशिश कर रहा हूं

NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];

मैं निम्नलिखित संभावित वाक्यविन्यासों का प्रयास कर रहा हूं जैसे कि निम्नलिखित (निश्चित रूप से यह काम नहीं करता है):

var string:NSString!
string = init(data: fooData,encoding: NSUTF8StringEncoding)

इस प्रकार आपको NSString को प्रारंभ करना चाहिए:

स्विफ्ट 2.X या पुराना

let datastring = NSString(data: fooData, encoding: NSUTF8StringEncoding)

स्विफ्ट 3 या नया:

let datastring = NSString(data: fooData, encoding: String.Encoding.utf8.rawValue)

यह डॉक्टर वाक्यविन्यास बताता है।


एक्सटेंशन के आधार पर एक और जवाब (लड़का मुझे जावा में याद आती है):

extension NSData {
    func toUtf8() -> String? {
        return String(data: self, encoding: NSUTF8StringEncoding)
    }
}

फिर आप इसका उपयोग कर सकते हैं:

let data : NSData = getDataFromEpicServer()
let string : String? = data.toUtf8() 

ध्यान दें कि स्ट्रिंग वैकल्पिक है, प्रारंभिक एनएसडीटा Utf8 के लिए अपरिवर्तनीय हो सकता है।


यह लागू कोड लागू है:

स्विफ्ट 3.0 में:

var dataString = String(data: fooData, encoding: String.Encoding.utf8)

या केवल

var dataString = String(data: fooData, encoding: .utf8)

पुराना तेज़ संस्करण:

स्विफ्ट 2.0 में:

import Foundation

var dataString = String(data: fooData, encoding: NSUTF8StringEncoding)

स्विफ्ट 1.0 में:

var dataString = NSString(data: fooData, encoding:NSUTF8StringEncoding)

import Foundation
var string = NSString(data: NSData?, encoding: UInt)




nsdata